在 selenium webdriver.PhantomJS 上设置超时

2023-11-25

情况


下面有长解释,所以TLDR:

当前版本的 Selenium 的 Ghostdriver(在 PhantomJS 1.9.8 中)忽略了 resourcesTimeout 选项,使用 webdriver 的implicitly_wait()、set_page_load_timeout() 并将它们包装在 try- except 块下。

#Python
from selenium import webdriver
from selenium.common.exceptions import TimeoutException

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)
browser.set_page_load_timeout(3)
try:
    browser.get("http://url_here")
except TimeoutException as e:
    #Handle your exception here
    print(e)
finally:
    browser.quit()

解释

提供PhantomJS页面设置对于 Selenium,可以使用 webdriver 的 DesiredCapability,例如:

#Python
from selenium import webdriver
cap = webdriver.DesiredCapabilities.PHANTOMJS
cap["phantomjs.page.settings.resourceTimeout"] = 1000
cap["phantomjs.page.settings.loadImages"] = False
cap["phantomjs.page.settings.userAgent"] = "faking it"
browser = webdriver.PhantomJS(desired_capabilities=cap)
//Java
DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
capabilities.setCapability("phantomjs.page.settings.resourceTimeout", 1000);
capabilities.setCapability("phantomjs.page.settings.loadImages", false);
capabilities.setCapability("phantomjs.page.settings.userAgent", "faking it");
WebDriver webdriver = new PhantomJSDriver(capabilities);

但是,这里有一个问题:就像今天(2014 年 12 月 11 日)使用 PhantomJS 1.9.8 及其嵌入式 Ghostdriver 一样,Ghostdriver 不会应用资源超时(请参阅 Github 中的 Ghostdriver 问题#380).

对于解决方法,只需使用 Selenium 的超时函数/方法并将 webdriver 的 get 方法包装在 try- except/try-catch 块中,例如

#Python
from selenium import webdriver
from selenium.common.exceptions import TimeoutException

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)
browser.set_page_load_timeout(3)
try:
    browser.get("http://url_here")
except TimeoutException as e:
    #Handle your exception here
    print(e)
finally:
    browser.quit()
//Java
WebDriver webdriver = new PhantomJSDriver();
webdriver.manage().timeouts()
        .pageLoadTimeout(3, TimeUnit.SECONDS)
        .implicitlyWait(3, TimeUnit.SECONDS);
try {
    webdriver.get("http://url_here");
} catch (org.openqa.selenium.TimeoutException e) {
    //Handle your exception here
    System.out.println(e.getMessage());
} finally {
    webdriver.quit();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 selenium webdriver.PhantomJS 上设置超时 的相关文章

随机推荐

  • 如何等待ajax调用返回

    我正在尝试使用 JQuery 尽管在执行进一步的代码之前我正在努力成功等待 ajax 调用成功 有没有办法等待ajax调用 我看过例子 但似乎只是盲目地等待 x 秒 谢谢 詹姆士 是的 您可以同步执行请求 var bodyContent a
  • AngularJS if 语句?

    所以我正在浏览 AngularJS 教程 我在控制器中定义了一个数组 当我循环 ng repeat feature name feature description 时 我通过调用返回数组中的不同点 我不明白的是 假设我在数组中有第三个点
  • 如何从 Instagram 网络浏览器中抓取关注者?

    谁能告诉我如何访问底层 URL 以查看给定用户的 Instagram 关注者 我可以使用 Instagram API 来完成此操作 但考虑到审批流程的待更改 我决定改用抓取 Instagram 网络浏览器允许您查看任何给定公共用户的关注者列
  • 使用 Backbone.js 将表单输入序列化为 JSON

    我正在开发 RESTful 应用程序 我在服务器端使用 Java 在前端使用 Backbone 两者将通过 JSON 进行通信 我的应用程序有很多表单 我想 将表单输入序列化为 JSON 将 JSON 发送到服务器 我的问题 将表单输入序列
  • 错误代码100在r中使用fitdist拟合exp分布

    我试图使我的数据符合指数分布 但出现以下错误 Error in fitdist x41 exp method mle the function mle failed to estimate the parameters with the e
  • 为什么从 .Net 应用程序调用 SQL 函数与在 Management Studio 中进行相同调用时存在性能差异

    我们在测试和开发环境中遇到一个问题 从 Net 应用程序调用时 函数有时运行速度非常慢 当我们直接从管理工作室调用这个函数时 它工作得很好 以下是它们在分析时的差异 从应用程序 中央处理器 906阅读数 61853写入 0持续时间 926
  • 使用 Ajax 从 DataTable 中删除一行

    我有一个 JSF 视图 它列出了 Primefaces 中集合中的项目DataTable 最右边的列包含删除按钮 当单击删除按钮时 应该进行 Ajax 调用 从会话变量中删除相应的项目Cart并就地更新视图 我希望请求和视图更改尽可能少 以
  • 无效查询。您不能使用多个“in”过滤器

    this ref collection users ref gt ref where uid1 in reciverId senderId where uid2 in reciverId senderId 给我错误 例如 查询无效 您不能使
  • 双向映射的最佳数据结构

    我想要一个从键映射到对象的数据结构 反之亦然 与仅在单个方向映射的 HashMap 不同 一个想法可能是将 HashMap 存储在其自身内部以进行反向查找 但这将是一种低效的方法 双向映射的最佳实现是什么 最简单的想法 包含 2 个映射的包
  • ActiveRecord::EagerLoadPolymorphicError:无法急切加载多态关联

    class Transaction lt ActiveRecord Base belongs to account polymorphic gt true end class Bankaccount lt ActiveRecord Base
  • 如何检测方向变化并更改布局?

    假设我有一个包含 2 行 2 列的网格 每个单元格内有许多控件 当应用程序更改为捕捉模式时 我的意思是屏幕的 1 3 我希望应用程序只有一列 2 行 并且只显示我决定的一些控件 我对此有什么控制权 thx 您应该在 xaml 中使用 Vis
  • 嵌套模块重新导入时出现 UnboundLocalError [重复]

    这个问题在这里已经有答案了 当我在 python 2 7 中重新导入已导入的模块时 出现 UnboundLocalError 一个最小的例子是 usr bin python import sys def foo print sys impo
  • 插入数据库日期时间字符串

    我有字符串04 04 2012 04 03 35 AM 如何将其转换并插入表中 字段类型为datetime 你需要使用STR TO DATE STR TO DATE 04 04 2012 04 03 35 AM d m Y r 或者 更好的
  • 如何将 Oracle 中的数据库模式导出到转储文件 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我在 Linux 计算机上安装了 Oracle 服务器上的数据库架构 我需要在转储文件中导出架构相关信息 这个怎么做 这取决于Oracle的哪个版本 旧版本需要exp 导出 新版
  • 如何生成随机字母数字字符串?

    如何在 C 中生成随机 8 个字符的字母数字字符串 我听说 LINQ 是新的黑色 所以这是我使用 LINQ 的尝试 private static Random random new Random public static string R
  • 如果“env”参数包含 unicode 对象,为什么 Popen 在 Windows 上失败?

    考虑这个例子 gt gt gt import subprocess as sp gt gt gt sp Popen notepad2 exe env PATH C users guillermo smallapps bin
  • Entity Framework + MySQL - 为什么性能这么糟糕?

    当我决定在我的新项目中使用 OR M 这次是 MySQL 的实体框架 时 我希望它能节省我的时间 但我似乎失败了 现在是第二次 执行这个简单的 SQL 查询 SELECT FROM POST ORDER BY addedOn DESC LI
  • ww SimpleDateFormat 的奇怪行为

    谁能解释为什么我在尝试解析日期时会得到这些值 我尝试了三种不同的输入 如下 1 2013年第三周 Date date new SimpleDateFormat ww yyyy parse 02 2013 Calendar cal Calen
  • J3k0 cordova-plugin-purchase 沙盒模式不起作用?

    好吧 我几乎已经完成了 Cordova 应用内购买 以使其在 Windows 沙箱模式下工作 我已经经历过this线程并尝试了所有可能的方法来实现它 但我做不到 我已经放置了in app purchase xml in www按照说明的文件
  • 在 selenium webdriver.PhantomJS 上设置超时

    情况 下面有长解释 所以TLDR 当前版本的 Selenium 的 Ghostdriver 在 PhantomJS 1 9 8 中 忽略了 resourcesTimeout 选项 使用 webdriver 的implicitly wait