问题标签 [ghostdriver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3413 浏览

jenkins - 将 Jenkins 与 phantomjs 集成以进行 selenium webdriver 测试

我正在将 jenkins 与 phantomjs 集成以运行我的 selenium 测试脚本。Phantomjs 安装在我的 jenkins 服务器中,并且 ghost 驱动程序在端口 8090 中运行。但是,我的测试仍然被跳过并且它抛出了一个异常

驱动程序可执行文件的路径必须由 phantomjs.binary.path 能力/系统属性/PATH 变量设置;有关更多信息,请参阅https://github.com/ariya/phantomjs/wiki。最新版本可以从 http://phantomjs.org/download.html下载”

我的詹金斯在 centos 中运行。

我的代码如下所示,

0 投票
1 回答
6344 浏览

python - Selenium 无法连接到 GhostDriver(但有时)

我在 Python 中使用 Selenium 和 PhantomJS 设置了一个简单的网页抓取脚本。我总共要抓取大约 200 个 URL。该脚本首先运行良好,然后在大约 20-30 个 URL 之后运行(它可以更多/更少,因为它失败时似乎是随机的并且与任何特定 URL 无关)我在 python 中收到以下错误:

还有我的ghostdriver.log:

我已经搜索过,关于 SO 的大多数问题似乎是他们甚至无法运行单个 URL。我发现脚本中间出现错误的唯一另一个问题是这个问题,答案是将 phantomjs 升级到最新版本,我已经完成了。另一个答案只是说再次尝试该 URL,这似乎不是一个好的解决方案,因为 URL 可能会再次失败。

我在 python 2.7.6 上的 Linux Mint 17 上运行 phantomjs 版本 1.9.7 和 selenium 版本 2.42.1

0 投票
1 回答
3862 浏览

java - 在 Selenium GhostDriver 中使用 JavascriptExecutor 处理警报/确认

我越来越绝望了。我在 Eclipse 中使用 Selenium 2.42.2 和带有 Java 的 phantomjsDriver 1.1.0。对于我的测试,我必须在打开页面时识别并存储警报和确认消息,也许还有提示。phantomjsDriver 还没有实现它,所以我需要一个 JavascriptExecutor 的解决方法。但我是一个js菜鸟,不能单独管理它。这是我的代码和我尝试过的:

当我打开我的网站时,它会立即打开确认提示,所以我知道有一个确认。但我只是得到例外

错误消息 => '找不到变量:lastConfirmationMessage'

0 投票
1 回答
7553 浏览

python-2.7 - 使用 phantomjs 获取具有scrapy 和 selenium 可能竞争条件的动态内容

首先,这是一个后续问题:Change number of running spiders scrapyd

我使用 phantomjs 和 selenium 为我的 scrapy 项目创建下载器中间件。当我在本地一次运行我的蜘蛛时,它运行良好并且并没有真正减慢速度。

但就在最近,我在 AWS 上安装了一个 scrapyd 服务器。我注意到一个可能的竞争条件,当多个蜘蛛同时运行时,它似乎会导致错误和性能问题。我觉得这个问题源于两个不同的问题。

1) 蜘蛛试图同时使用 phantomjs 可执行文件。

2) 蜘蛛试图同时登录到 phantomjs 的 ghostdriver 日志文件。

在这里猜测,性能问题可能是蜘蛛试图等到资源可用(这可能是因为我也有一个 sqlite 数据库的竞争条件)。

这是我得到的错误:

exceptions.IOError: [Errno 13] Permission denied: 'ghostdriver.log' (日志文件竞争条件?)

selenium.common.exceptions.WebDriverException:消息:“无法连接到 GhostDriver”(可执行竞争条件?)

我的问题是:

我对问题所在的分析是否正确?

除了限制一次可以运行的蜘蛛数量之外,还有其他已知的解决方案吗?

还有其他我应该处理javascript的方法吗?(如果您认为我应该创建一个全新的问题来讨论使用 scrapy 处理 javascript 的最佳方法,请告诉我,我会的)

这是我的下载器中间件:

注意: _platform 代码是一个临时工作,直到我将此源代码部署到静态环境中。

我在 SO 上找到了针对 javascript 问题的解决方案,但它们是基于蜘蛛的。这让我很困扰,因为这意味着每个请求都必须在下载程序处理程序中发出一次,然后在蜘蛛程序中再次发出。这就是为什么我决定将我的实现为下载器中间件。

0 投票
5 回答
29166 浏览

python - 需要从 selenium 服务器转储带有元素 id 的整个 DOM 树

我一直在使用 python selenium 进行网络自动化测试。自动化的关键部分是为 HTML 页面中的用户可见对象找到正确的元素。以下 API 将在大部分时间工作,但并非一直有效。

当 HTML 页面太复杂时,我想搜索 dom 树。想知道是否可以要求 selenium 服务器序列化整个 DOM(具有可用于通过 webdriver 服务器执行操作的元素 id)。客户端(python 脚本)可以执行自己的搜索算法来找到正确的元素。

请注意,python selenium 可以通过以下方式获取整个 html 页面

但是,从 selenium 服务器的角度来看,解析它并没有给出内部元素 id,因此没有用。

EDIT1:解释 它以使其更清晰(感谢@alecxe):这里需要的是硒服务器中所有DOM元素(保留其DOM结构)的序列化表示,这个序列化表示可以发送到客户端(一个 python selenium 测试应用程序),它可以进行自己的搜索。

0 投票
2 回答
2388 浏览

selenium-webdriver - PhantomJSDriver (GhostDriver) 无法使用 javascript 获取 localStorage 值

使用 PhantomJsDriver (GhostDriver) 测试我的 Web 应用程序。尝试使用以下调用访问本地存储值:

在 webDriver 初始化中,我正在设置功能:

在尝试执行上面的 JS 时收到 WebDriverException,看起来好像webStorageEnabled从未设置为 true:

org.openqa.selenium.WebDriverException: {"errorMessage":"SECURITY_ERR: DOM Exception 18","re​​quest":{"headers":{"Accept":"application/json, image/png","Connection":" Keep-Alive","Content-Length":"98","Content-Type":"application/json; charset=utf-8","Host":"localhost:20884"},"httpVersion":"1.1 ","method":"POST","post":"{\"args\":[],\"script\":\"return localStorage.getItem('cartId_136d7735-13d7-8178-8abf-010beb62f8cf') ;\"}","url":"/execute","urlParsed":{"anchor":"","query":"","file":"execute","directory":"/","path":"/execute","re​​lative":"/execute","port":"","host":"","password":"","user":""," userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{},"chunks":["execute"]},"urlOriginal" :"/session/5f67ce30-310a-11e4-83c7-6d52cfce6b64/execute"}} 命令持续时间或超时:8 毫秒构建信息:版本:'2.39.0',修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12- 16 13:18:38'密码":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{}, "chunks":["execute"]},"urlOriginal":"/session/5f67ce30-310a-11e4-83c7-6d52cfce6b64/execute"}} 命令持续时间或超时:8 毫秒构建信息:版本:'2.39.0' ,修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12-16 13:18:38'密码":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{}, "chunks":["execute"]},"urlOriginal":"/session/5f67ce30-310a-11e4-83c7-6d52cfce6b64/execute"}} 命令持续时间或超时:8 毫秒构建信息:版本:'2.39.0' ,修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12-16 13:18:38'/session/5f67ce30-310a-11e4-83c7-6d52cfce6b64/execute"}} 命令持续时间或超时:8 毫秒构建信息:版本:'2.39.0',修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12-16 13 :18:38'/session/5f67ce30-310a-11e4-83c7-6d52cfce6b64/execute"}} 命令持续时间或超时:8 毫秒构建信息:版本:'2.39.0',修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12-16 13 :18:38'

驱动程序信息:org.openqa.selenium.phantomjs.PhantomJSDriver Capabilities [{platform=MAC, acceptSslCerts=false, javascriptEnabled=true, browserName=phantomjs, rotatable=false, driverVersion=1.1.0, locationContextEnabled=false, version=1.9.7 ,cssSelectorsEnabled=true,databaseEnabled=false,handlesAlerts=false,browserConnectionEnabled=false,webStorageEnabled=false,nativeEvents=true,proxy={proxyType=direct},applicationCacheEnabled=false,driverName=ghostdriver,takeScreenshot=false}] 在 sun.reflect .NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

我遇到的问题可能是什么原因?是否可以为 PhantomJSDriver 设置 webStorageEnabled?如果不是,我该如何解决这个问题?

0 投票
0 回答
253 浏览

python - 如果文件大于 20000 字节,PhantomJS 文件上传失败

在使用 PhantomJS 和 Selenium 上传文件时,我发现了一个非常奇怪的问题。我注意到,可以上传较小的文件,而不能上传较大的文件。

所以我运行了一个二进制搜索来找出它停止工作的文件大小。这表明每个大于 20000 字节的文件都无法上传。由于它不是 2 的幂,我猜这个限制是由某个人设置的,出于某种原因,在 phantomJS、Ghostdriver 或 Selenium 的整个堆栈中。我花了几个小时来解决这个问题;有没有人遇到过这个问题或知道下一步该去哪里?

0 投票
3 回答
5948 浏览

ruby - 使用 Ruby 在 Selenium Webdriver 中为 PhantomJS 设置自定义用户代理

今晚我已经上网了,大约 3-4 个小时。我已经尝试了我遇到的每一个建议。我什至检查了我的 Selenium 驱动程序对象上的“功能”对象,以确保它确实设置在那里,事实上,它是:

除了“phantomjs.page.settings.userAgent”之外,我还尝试了“userAgent”等。过去 3-4 小时内我在网上找到的所有东西,我都试过了。显然,在 2013 年初,这是一个相当普遍的问题,而我所说的解决方案显然是常见的解决方案。这些都不起作用,事实上,我从这些信息中肯定知道这一点(注意 User-Agent 是“Ruby”)

不幸的是,如果您使用的是 Java ,还有更多关于此类 Selenium 问题以及许多其他问题的信息和讨论。在这一点上,我希望我能在各个方面都使用 Java 来完成这个项目,但现在我有 30,000 行代码,这些代码完全是我在过去 2 个月里自己编写的。至少现在失去这份工作不仅对我个人而言是毁灭性的,而且对我的工作也是灾难性的。

是什么赋予了?我真的必须深入挖掘并定制源代码以获得我想要的东西,还是这个功能现在真的实现了?同样,我看到了 2013 年初的所有答案,但它们对我不起作用,我不知道为什么,或者如何轻松解决它。我在最后期限,所以这开始非常紧张。

有人对我有什么想法吗?请记住,我使用的是 Ruby,而不是 Java。

Selenium-webdriver 是 2.43。PhantomJS 是 1.9.7。GhostDriver 是 1.1.0。

对我来说,这似乎令人难以置信,没有办法修改您的用户代理。

如果我能提供任何其他可能有帮助的信息,请告诉我。

如果您愿意分享一些想法或一些信息以让我指出正确的方向,我提前感谢您。

0 投票
0 回答
138 浏览

python-2.7 - PhantomJS Ghostdriver 和鼻子 --with-id

我正在使用 Nose 作为测试运行器在 python 中进行 Selenium 测试。我像这样运行我的测试

测试完成后,我通常会运行

到目前为止,我们已经使用 FireFox 和 Chrome webdrivers 运行测试,没有任何问题。一两个测试失败的情况并不少见(因为我们的网站经历了频繁的构建,这会导致测试短暂失败),并且只重试这些测试。

当我使用 PhantomJS 的 Ghostdriver 时,行为类似于 Chrome/FF,因为一两个测试失败。但是当我运行时,nosetests --failed 所有测试都会重新运行,而不仅仅是失败的测试。

webdriver设置一个这样的:

第一次使用 phantomjs 输出的nosetest.xml

但在第二次通过时,所有 37 个测试都将重新运行。

这是 Ghostdriver 的已知问题吗?还是我缺少一些东西?

0 投票
1 回答
728 浏览

node.js - WebdriverJS/IO & PhantomJS - 带有属性选择器的点击处理程序不适用于 PhantomJS

我目前正在使用 WebdriverJS 和 PhantomJS 编写应用程序测试套件。为了确保我的测试正常工作,我首先通过 Chrome 运行它们,它们都运行良好。但是,当我将 Chrome 换成 PhantomJS 时,测试就中断了。

这个问题 - WebDriver PhantomJS Unable to find element, but works fine with Firefox - 似乎概述了一个非常相似的问题,但随附的解决方案似乎没有帮助。

这是在 Chrome 上工作的东西类型的粗略示例,但在 PhantomJS 上不工作:

在 PhantomJS 上运行时,我显然首先更改了 WebdriverJS 选项:

但是当我运行测试并将 logLevel 设置为“详细”时,我收到如下错误消息:

为什么常见的 CSS2+ 选择器,如“[data-id='1568911']”,甚至“#foo”,不能通过 WebdriverJS 在 PhantomJS 上工作?它是 PhantomJS 错误、WebdriverJS 错误还是我在实现中犯的错误?