[java] Chromedriver 78의 가능한 문제, Selenium이 Chrome에서 열린 PDF의 웹 요소를 찾을 수 없음

Google Chrome이 78 버전으로 업데이트되지 않을 때까지 내 코드는 정상적으로 작동했습니다. 또한 chromedriver를 78.0.3904.70 버전으로 업데이트했습니다. 그래서 더 이상 Selenium WebDriver 및 Java를 사용하여 id = ‘plugin’인 WebElement를 찾을 수 없습니다.

<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&amp;reanudar=&amp;>
</div>
</html>

그 부분을 제외하고 내 테스트는 정상적으로 작동합니다. 나는 전에 비슷한 문제가 없었습니다. 또한 WebElement id = ‘content’를 찾으려고했지만 같은 오류가 발생합니다.

WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));

scrollvalid.sendKeys(Keys.PAGE_DOWN);                       scrollvalid.sendKeys(Keys.PAGE_DOWN);

내 자동화 스크립트가 PDF 요소를 찾아서 페이지를 아래로 스크롤해야합니다. 대신 다음 오류가 발생합니다. org.openqa.selenium.TimeoutException : By.id에 의해 위치한 요소의 가시성을 기다리는 90 초 후에 시간 초과 : plugin

비슷한 문제에 직면 한 사람이 있습니까? 미리 감사드립니다.



답변

나는 같은 문제에 부딪쳤다.

분명히 Chrome은 자동으로 업데이트됩니다. 어제 ( ‘Oct 29 ’19) ChromeDriver가 Chrome 78과 호환되지 않는다고 불평하기 시작했습니다. 드라이버를 78 버전으로 업데이트했습니다. 내가 확인한 요소를 찾으려고 할 때 임의의 org.openqa.selenium.NoSuchElementException 예외가 발생하기 시작했습니다. findElement (s)는 중단 점을 사용할 때도 작동합니다. 또한 제한된 성공으로 암시 적 대기를 시도했습니다.

zsbappa의 ChromeOption 솔루션을 사용해 보았지만 기쁨은 없습니다.

Google은 이전 버전의 Chrome을 얻기가 어렵지만 https://www.neowin.net/news/google-chrome-76-offline-installer/ 에서 버전 76을 찾았습니다 . 온라인 설치 프로그램은 최신 버전을 설치합니다. 나는 76에 대한 드라이버로 돌아 왔고 모두 좋다. 모든 Selenium 테스트가 다시 작동합니다.

내 결론은 Chrome 78과 관련 드라이버가 완료되기 전에 Selenium이 웹 페이지를 조사하려고 시도하는 경쟁 조건이 있다는 것입니다.


답변

Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0과 비슷한 문제에 직면했습니다.

자동화 된 Python Selenium 테스트에서 요소에 대한 클릭이 발생하지 않은 것처럼 보이는 여러 가지 오류가 있습니다. 낯선 사람이라도 요소를 클릭 한 것처럼 활성화되었지만 실제 클릭 이벤트는 발생하지 않은 것으로 보입니다. 결과적으로 페이지 전환 등이 발생하지 않아 다양한 다운 스트림 오류가 발생합니다.

추적 및 오류 과정에서 표준 .click () 함수 사용이 신뢰할 수 없음을 발견했습니다.

webdriver_element.click()

그러나 액션 체인을 사용하는 것이 신뢰할만한 것으로 보입니다.

ActionChains(context.browser).click(webdriver_element).perform()

이것이 왜 그런지는 확실하지 않습니다. Chrome 78.0.3904.7로 업그레이드하자마자 실패가 시작되었습니다. Chromedriver 77.0.3865.90을 사용하고 있지만 동일한 테스트가 Chrome 77.x 버전에서 안정적으로 통과하므로 Chrome 78에서 문제가 있거나 변경된 것으로 보입니다.


답변

다음 인수를 추가하여 문제를 해결했습니다.

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);


답변

iframe 내부의 탭에 액세스하려고 할 때 동일한 문제에 직면했으며 버전 76에서는 정상적으로 작동했습니다. 이제 78로 업데이트되었지만 실패했습니다. waits, implicit waits, sleep을 시도하고 xpath, CSS, id, switch context을 사용하여 요소를 찾은 다음 뷰까지 스크롤하십시오. Windows 10, 1809를 사용하고 있습니다. 다른 OS에서 이것이 발생하는지 모르겠습니다.

내가 제기 한 질문은 다음과 같습니다.

Chromedriver 78.0.3904.70 로케이터 사용시 문제


답변

어제이 문제가 요소가 iframe에 포함 된 경우에만 나타납니다. 이 경우 iframe이 올바르게 배치됩니다. 그러나 드라이버 또는 웹 드라이버 대기 객체를 사용하여 웹 요소를 찾으려면 NoSuchElement또는 TimeoutException각각이 발생합니다.

나는 chromedriver 팀에 자세한 chrome driver 로그를 제공했으며 작업 중입니다.

업데이트 : Chromedriver 문제 3223에서

로그는 프레임에 대한 최종 executionContextCreated가 FindElement가 널을 리턴 할 때까지 완료되지 않음을 보여줍니다. 버전 77부터 ChromeDriver는 탐색을 계속하기 전에 모든 프레임이로드되기를 기다리는 것을 중단했습니다. 불행히도이 변경으로 인해 현재 프레임이로드 될 때까지 기다리지 못했습니다. 3164는 현재 프레임이로드 될 때까지 기다립니다. 그러면 프레임로드가 중지되고 executionContext가 생성 될 때까지 FindElement가 검색되지 않습니다.

기본적으로이 버그는 v.77에서 도입되었습니다. v.76에서 .v78로 업그레이드했기 때문에 많은 사람들이이 문제를 발견했습니다. 단어는 .v80 (v. 79 아님)에 대한 수정 프로그램을 대상으로한다는 것입니다. 해결 방법으로, Thread.sleepiframe으로 전환하는 시간과 구성 요소를 찾으려고 할 때 사이를 사용 하고 있습니다. 이 해결 방법은 잘 작동합니다. 사실, 단순히 디버그 모드에서 응용 프로그램을 실행하여이를 직접 확인할 수 있습니다. 중단 점을 사용하여 실행을 일시 중지하면 원래 코드 (절전없이)가 제대로 작동 함을 알 수 있습니다.


답변

예를 들면 다음과 같습니다.이 키워드를 사용해보십시오!.

1. implicit_wait=10
2. Sleep  10


답변

Chromedriver가 아닌 Google Chrome에 문제가있는 것으로 나타났습니다 : https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211