[ERROR] NoSuchElementException

zizi·2023년 5월 12일

오류 정리

목록 보기
1/7
post-thumbnail

오류 메시지

org.openqa.selenium.NoSuchElementException : no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="container"]/section/article[2]/div[1]/header/div/h3/span[2]"}

오류 원인

처리 중에 명령 무시
따라서 로그인 명령을 내린 후 처리될 시간을 줘야함

대기의 종류

명시적 대기

  • 웹드라이버에 대기 시간을 주는 객체
  • 조건이 충족될 때까지 대기
WebDriverWait wait = new WebDriverWait(driver,10); // 10초
wait.until(ExpectedConditions.urlToBe("https://www.daum.net/")); //명시적 대기
// 가져올 데이터가 로딩될 때까지 기다림
webDriverWait.until(
                ExpectedConditions.presenceOfElementLocated(By.cssSelector("div._fnctWrap > form:nth-child(2) > div > table > tbody > tr"))
       );

명시적 대기 예시

 // 명시적 대기 ( 해당 요소가 나타날 때까지 대기 )
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#account > a")));
driver.findElement(By.cssSelector("#account > a")).click(); // #account > a 요소를 찾아서 클릭

묵시적 대기

  • 단위 : 밀리세컨드 (1/1000)
  • 1000이라는 값을 주면 스레드는 1초동안 일시 정지 상태
Thread.sleep(5000); //묵시적 대기. 5초
  • 단점
    1) 트랙픽이 몰리면 1초로는 부족할 수도 있음.
    2) 1초보다 빨리 로그인이 수행될 경우 남은 시간을 기다려야함

묵시적 대기 예시

public class SeleniumEx {
	public static void main(String[] args) throws Exception {
    	String url = "https://www.dcinside.com/";
        WebDriver driver = new ChromeDriver(chromeOptions);
        
        driver.get(url);
		Thread.sleep(1000);
        driver.findElement(By.xpath("//*[@id=\"container\"]/div/section[1]/article[1]/div[3]/ul[1]/li[1]/a/div[2]/p")).click();
		Thread.sleep(1000);  
}

Selenium wait의 개념

우리는 명령어로 셀레니움을 조작한다.
예를 들어 driver.get(‘https://pythondocs.net’) 이라고 치면 파이썬은 셀레니움을 신호를 보내고 셀레니움은 브라우저에 url 을 이동하라고 신호를 보낸다.

브라우저는 pythondocs 서버로 웹페이지를 보여달라는 신호를 보내고 pythondocs.net 은 신호를 받고 html, css, 자바스크립트라는 언어로 된 웹페이지 정보를 나의 브라우저로 보내준다.

나의 브라우저는 수신한 언어를 사람들의 눈에 보기 좋은 화면으로 변환(render, 렌더)해서 브라우저 화면으로 보여준다.

자 그럼 당연히 시간 차라는 것이 생기게 된다.
driver.get(‘https://pythondocs.net’) 명령어를 쓰자마자 서버로부터 데이터를 받아오기도 전에 브라우저 화면에 있는 것을 어떻게 하라는 그 다음 명령어가 실행되면 컴퓨터는 당연히 에러 내거나 올바르게 코드가 작동하지 않는다.
기다려야 한다!

참고

https://badong.tistory.com/241

profile
좋았다면 추억이고 나빴다면 경험이다.🍀

0개의 댓글