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


17

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 버전 78을 삭제하고 버전 76을 설치했으며 자동화 테스트가 다시 작동합니다. 모든 것이 완벽하게 작동합니다. 버전 78의이 문제가 해결되기를 바랍니다. 그래서 chromedriver (버전 78)를 사용하고 .pom 파일에서 다음 종속성이 있습니다. <dependency> <groupId> org.seleniumhq.selenium </ groupId> <artifactId> selenium-chrome-driver </ artifactId> <version> 3.141.59 </ version> </ dependency>
혼합

같은 문제가 있습니다. 이전에 작동했던 코드는 이제 웹 드라이버가 찾으려는 웹 요소를 찾지 못하므로 실패합니다. 암시 적 대기와 명시 적 대기는 동일하게 실패합니다. 내가 정확히 지적 할 수 없었던 것은 그것이 문제가 있거나 iframe 내부에있는 구성 요소 인 요소의 유형입니다. 이 문제를 해결 Thread.sleep하기 위해이 업데이트를 수행하기 전에 암시 적 또는 명시 적 대기 위치 에 추가 했습니다.
hfontanez

chromedriver 77을 사용하는 Chrome 78이 적합합니다.
Yun

답변:


5

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

분명히 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이 웹 페이지를 조사하려고 시도하는 경쟁 조건이 있다는 것입니다.


ChromeDriver 개발자와 함께 3198 호를 열었습니다.
wdtj

1
내 문제에 대해 다음과 같은 답변을 받았습니다.이 문제를보고 해 주셔서 감사합니다. 버전 77부터 Chromedriver는 새 페이지로 이동하거나 창을 전환 할 때 프레임 또는 iframe이로드 될 때까지 기다리지 않습니다. 리소스를 사용할 수있을 때까지 코드 대기가 필요합니다. 대부분의 바인딩에는 암시 적 대기 설정과 명시적인 대기가 있습니다. 자세한 내용은 Selenium 설명서에서 WebDriverWait를 검색하십시오.
wdtj

그러나 우리는 명시 적 대기를 사용하고 있지만 도움이되지 않습니다. iframe을 변경하는 데 도움이되지만 포함 된 pdf에는 HTML 태그가 더 이상 표시되지 않습니다.
혼합

chromedriver 그룹에서 새로운 이슈를 열었습니다 : bugs.chromium.org/p/chromedriver/issues/detail?id=3211
Mix

테스트에 Chromium을 사용할 수 있으며 Google 서비스가없는 Chrome의 기본 버전이며 자체 업데이트되지 않으며 Chromedriver와 잘 작동합니다. chromium.org/getting-involved/download-chromium
Blaise

3

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에서 문제가 있거나 변경된 것으로 보입니다.


이것은 꽤 도움이되었습니다. 감사합니다.
피에 돈

1

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

   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);

안녕하세요 @zsbappa! 당신의 답변에 감사드립니다. 그러나 이것은 내 문제를 해결하지 못합니다. 문제는 chromedriver (버전 78)가 포함 된 pdf에서 웹 요소를 찾을 수 없다는 것입니다. 이 기능은 Google 크롬이 78 버전으로 업데이트되지 않을 때까지 제대로 작동했습니다. PS 헤드리스 모드에서 테스트를 실행하고 있지 않습니다
Mix

이러한 옵션이 OP 문제를 해결하는 방법은 명확하지 않습니다.
칼 코빈

이렇게해도 문제가 해결되지 않습니다. 웹 요소가 iframe 안에없는 시나리오를 실행하고있을 가능성이 높습니다.
hfontanez

1

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

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

Chromedriver 78.0.3904.70 로케이터 사용시 문제


1

어제이 문제가 요소가 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으로 전환하는 시간과 구성 요소를 찾으려고 할 때 사이를 사용 하고 있습니다. 이 해결 방법은 잘 작동합니다. 사실, 단순히 디버그 모드에서 응용 프로그램을 실행하여이를 직접 확인할 수 있습니다. 중단 점을 사용하여 실행을 일시 중지하면 원래 코드 (절전없이)가 제대로 작동 함을 알 수 있습니다.


0

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

1. implicit_wait=10
2. Sleep  10

@Narasimhamurthy GN 님, 답변 주셔서 감사합니다. 명시 적 대기는 문제가 아니며 테스트 전체에서 명시 적 대기를 사용하고 있으며 비슷한 문제에 직면하지 않습니다. 문제는 chromedriver (버전 78)가 포함 된 pdf에서 웹 요소를 찾을 수 없다는 것입니다.
Mix

나에게 몇 가지 테스트 사례는 "geckodriver"(Firefox)를 사용하는 것과 동일한 문제에 직면했습니다.
Narasimhamurthy GN

그렇지 않으면 다른 셀레늄 라이브러리 로케이터 키워드를 사용하여 WebElement를 찾으십시오.
Narasimhamurthy GN

불행히도, 우리의 웹 응용 프로그램 사용자는 Chrome 또는 Internet Explorer를 사용하는 것이 좋습니다. 어떤 이유로 든 Firefox는 권장하지 않습니다. 그렇기 때문에 Firefox를 사용하여 테스트를 자동화 할 수 없습니다. 셀레늄을 사용하여 pdf에서 웹 요소를 찾으려면 가능한 모든 방법을 사용하려고 시도했지만 작동하지 않습니다. 나는 또한 다른 의존성 및 크롬 드라이버를 사용해 보았지만 아무것도 작동하지 않습니다.
믹스


0

나는 같은 문제가 있었다.

버전 78.0으로 Chrome을 자동 업데이트 한 후 자동 테스트 스크립트가 실패했습니다. 그래서 chromedriver를 78 버전으로 업데이트했지만 드라이버가 여전히 웹 요소를 찾을 수 없었습니다. 그 후 여러 버전의 chromedriver를 사용해 보았고 마지막으로 chromedriver 버전 2.44로 문제가 해결되었습니다 .

이 버전은 https://chromedriver.storage.googleapis.com/index.html?path=2.44/ 에서 찾을 수 있습니다.


-1

당신은 할 수 Nuget의 패키지 관리자가 삭제 크롬 드라이브를 크롬을 검색, 새 버전의 다운로드 selenium.web.driver.ChromeDriver을 jsaKamoto에 대한 >>

거기에 크롬 버전 78이 있습니다.


응답 주셔서 감사하지만 크롬 버전 78 NoSuchElement 예외 문제에 실제로 답변하지 않습니다.
wdtj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.