一尘不染

在Selenium Webdriver上设置超时

selenium

情况

我有一个简单的python脚本来获取给定URL的HTML源:

    browser = webdriver.PhantomJS()
    browser.get(url)
    content = browser.page_source

有时,URL指向外部资源加载缓慢的页面(例如,视频文件或非常慢的广告内容)。

在完成.get(url)请求之前,Webdriver将等待直到加载了这些资源。

注意:由于其他原因,我需要使用PhantomJS而不是requestsurllib2


问题

我想在PhantomJS资源加载上设置一个超时,以便如果资源加载时间太长,浏览器只会认为它不存在或其他原因。

这将允许我.pagesource基于浏览器已加载的内容执行后续查询。

关于webdriver.PhantomJS的文档非常薄,我还没有找到类似的问题。

提前致谢!


阅读 545

收藏
2020-06-26

共1个答案

一尘不染

PhantomJS提供了resourceTimeout,可能适合您的需求。我在这里引用文档

(以毫秒为单位)定义了超时,在此超时之后,所请求的任何资源将停止尝试并继续处理页面的其他部分。onResourceTimeout回调将在超时时被调用。

因此,在Ruby中,您可以执行以下操作

require 'selenium-webdriver'

capabilities = Selenium::WebDriver::Remote::Capabilities.phantomjs("phantomjs.page.settings.resourceTimeout" => "5000")
driver = Selenium::WebDriver.for :phantomjs, :desired_capabilities => capabilities

我相信Python,就像(未经测试,仅提供逻辑,您是Python开发人员,希望您能弄清楚)

driver = webdriver.PhantomJS(desired_capabilities={'phantomjs.page.settings.resourceTimeout': '5000'})
2020-06-26