当前位置: 首页 > 面试题库 >

在Selenium Webdriver上设置超时

段干浩荡
2023-03-14
问题内容

情况

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

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

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

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

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

问题

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

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

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

提前致谢!


问题答案:

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'})


 类似资料:
  • 我在页面加载上有一些问题,因为页面加载了一些异步的东西,我想中断页面加载来继续我测试的下一个步骤。 我该怎么解决这个?

  • 我在我的项目中设置了一个RestTemplate和一个AsyncRestTemplate,如下所示: 我注意到连接超时实际上并不起作用,除非我将httpRequestFactory()bean更改为如下所示: 如果我将DEFAULT_READ_TIMEOUT_MILLISECONDS设置为5,则当我使用restTemplate时会发生超时(正如预期的那样)。但是,当我使用AsyncRestTemp

  • 问题内容: 在某些代码块的运行时间超过可接受的时间之后,是否可以强制Java引发Exception? 问题答案: 是的,但是强制另一个线程在随机的代码行上中断通常是一个非常糟糕的主意。仅当您打算关闭该过程时,才这样做。 您可以做的是在一定时间后用于任务。但是,除非代码对此进行检查,否则它将无法正常工作。ExecutorService可以使此操作更容易 代码自动计时并在需要时停止会更好。

  • 问题内容: 我正在尝试在使用http.request且没有运气的HTTP客户端上设置超时。到目前为止,我所做的是: 有什么提示吗? 问题答案: 现在可以使用option和相应的request事件:

  • 我有一些可能需要一段时间才能执行的REST API,我想限制它们的执行持续时间。优选地,如果30秒过去了并且请求没有返回,我希望返回特定的HTTP代码/数据并完全终止该请求。 当前代码:

  • 问题内容: Firefox总是加载动态图像,但是IE只是显示图像而没有任何动态动作。我需要做些什么改变? IE查看源代码中的JavaScript代码: 我正在使用Wicket框架,所以真正的Java代码是: 加载我的动态图像的html页面是: 问题答案: 解决了我的问题。可能对其他人有用: 回答: HTML源代码: HTML: