gpt4 book ai didi

python - Phantom JS 驱动程序有时无法定位元素

转载 作者:太空狗 更新时间:2023-10-30 00:10:36 26 4
gpt4 key购买 nike

我是 PhantomJS 的新手,我正在尝试使用 phantomjs 驱动程序运行我的 selenium 测试(python),但它不会运行 web 元素。

Ghostdriver 日志:

[INFO  - 2015-02-27T15:24:40.236Z] GhostDriver - Main - running on port 52653
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1","webSecurityEnabled":true}
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.customHeaders: - {}
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.0.0","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"mac-10.9 (Mavericks)-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
[INFO - 2015-02-27T15:24:41.075Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: bfd397f0-be94-11e4-ad03-b711254501c8
[ERROR - 2015-02-27T15:24:47.242Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1425050687190

:262 in error

有趣的是,在我成功安装 phantomjs 之后,我运行了我的登录测试并且它顺利通过了。然后我运行了另一个测试,但由于上述相同原因而失败。我尝试再次运行已通过的登录测试 - 但 phantomjs 驱动程序将不再找到这些元素。

知道是什么原因造成的吗?

顺便说一句,这些测试在 chrome 和 FF 上运行良好

最佳答案

所以...看起来任何使用 Selenium WebDriver Wait 的元素实际上都在使用轮询方案。请记住,Selenium 显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。默认情况下,WebDriverWait 每 500 毫秒调用一次 ExpectedCondition,直到它成功返回。 ( reference. ) 这意味着每 500 毫秒,Selenium 测试等待条件。如果为真,则继续。如果尚未为真,请等待另一个轮询频率周期,然后重试。

从我的测试来看,我相信轮询测试和尚未准备好的所谓失败肯定会在我的 ghostdriver.log 中产生错误

[ERROR - 2016-08-14T08:50:12.896Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1471164612878

我正在从事一个抓取复杂的单页 AJAX 网站的项目。因为该站点重复使用了常见的 div 元素,所以我必须进行大量调用(清除、粘贴值、单击、等待、转到页面上的不同表格、复制感兴趣的数据、重复...)以获得我需要的数据。因为网站有点慢,我通过以下方式应用等待元素:

driver.wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='special_content_id']//td[contains(.,'" + info.unitId + "')]")))

原来轮询频率是在类selenium.webdriver.support.wait.WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

Reference here.

我对这种行为很好奇。当我的 poll_frequency 设置为 0.5 秒时,我收到 98 个 WebElementLocator 错误。当我将它切换到 7.5 秒时,driver.wait = WebDriverWait(driver, 60, 7.5),我只收到 36 个错误。更小的轮询时间会产生更多的错误。

我真正觉得奇怪的是,我不希望正常的轮询行为 (Selenium) 在任何地方 (PhantomJS) 设置日志错误。我真希望有一个不同的日志条目用于轮询,元素尚未准备好...

关于python - Phantom JS 驱动程序有时无法定位元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com