这是令人尴尬的问题,因为它似乎是错误的机会.我不认为这会很困难,但我现在已经把它搞砸了近3个小时了,这让我很头疼.我已经阅读了几十个stackoverflow线程和谷歌线程.
我安装了PhantomJS,将它添加到我的系统变量路径中,它在命令行中正常工作.我之前还使用easy_install安装了Selenium.
我得到的错误是:
__init__ C:\Python27\lib\site-packages\selenium-2.39.0-py2.7.egg\selenium\webdriver\phantomjs\webdriver.py 50
start C:\Python27\lib\site-packages\selenium-2.39.0-py2.7.egg\selenium\webdriver\phantomjs\service.py 66
WebDriverException: Message: 'Unable to start phantomjs with ghostdriver.' ; Screenshot: available via screen
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path="C:\Python27\misc\phantomjs\phantomjs.exe")
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
from selenium import webdriver
driver = webdriver.PhantomJS()
Run Code Online (Sandbox Code Playgroud)
我收到相同的错误消息.这一定很简单,我做错了.我很感激任何评论或答案.
Windows 7 64位Python 2.7
我想phantomJS用于一些网络测试,我遇到过GhostDriver(https://github.com/detro/ghostdriver).我使用自述文件中的说明构建它,我可以在指定的端口上运行它,但我不知道如何从我的java代码访问Web驱动程序.为了澄清,我在ruby中看到了这个例子:
caps = {
:browserName => "phantomjs",
:platform => "LINUX"
}
urlhub = "http://key:secret@hub.testingbot.com:4444/wd/hub"
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 120
@webdriver = Selenium::WebDriver.for :remote, :url => urlhub, :desired_capabilities => caps, :http_client => client
@webdriver.navigate.to "http://www.google.com/"
puts @webdriver.title
@webdriver.save_screenshot("./screenshot.png")
@webdriver.quit
Run Code Online (Sandbox Code Playgroud)
我只是不确定如何从java做同样的事情.
我想知道Selenium Webdriver和Selenium Ghostdriver之间的区别.
我也很困惑为什么使用selenium Ghostdriver?
请给我一个简短的想法.
提前致谢.
java selenium differentiation selenium-webdriver ghostdriver
((JavascriptExecutor) driver).executeScript("arguments[0].click();", buttonToClick);
Run Code Online (Sandbox Code Playgroud)
^域名故意编辑.
根据无法找到变量 - PhantomJS这个错误与没有正确执行Javascript的执行有关.我不明白这在我的Java程序的上下文中意味着什么.
我的Selenium程序只有一种Javascript调用,它的工作原理如下:
String[] cli_args = new String[]{"--debug=false", "--web-security=false", "--ssl-protocol=any", "--ignore-ssl-errors=true"};
DesiredCapabilities caps = DesiredCapabilities.phantomjs();
caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cli_args);
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/Users/richard/Downloads/phantomjs-2.0.0-macosx/bin/phantomjs");
driver = new PhantomJSDriver(caps);
Run Code Online (Sandbox Code Playgroud)
上面的这一行似乎不是问题,因为从我的测试中我可以看到像上面这样的多行在遇到上述错误之前执行没有错误.
此外,Session.NegotiatedCapabilities有"acceptSslCerts":false,我无法使用此代码块作为PhantomJS驱动程序初始化程序解决:
Jan 16, 2016 6:23:40 AM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
INFO: arguments: [--web-security=no, --ignore-ssl-errors=yes, --webdriver=33238, --webdriver-logfile=/Users/richard/YeezyBot/phantomjsdriver.log]
Run Code Online (Sandbox Code Playgroud)
我可以看到参数是在控制台上传递的......
((JavascriptExecutor) driver).executeScript("arguments[0].click();", buttonToClick);
Run Code Online (Sandbox Code Playgroud)
最后,一切都适用于Firefox WebDriver.
我有以下问题
java -jar selenium-server-standalone-2.53.0.jar -role hub
phantomjs --webdriver=8090 --webdriver-selenium-grid-hub=http://localhost:4444
但得到了错误:
[INFO - 2016-03-25T13:56:28.397Z] GhostDriver -主-端口运行8090 [INFO - 2016-03-25T13:56:28.397Z] GhostDriver -主-注册到硒HUB' 的http://本地主机:4444 '版本:使用'127.0.0.1:8090'与org.openqa.grid.selenium.proxy.DefaultRemoteProxy作为远程代理.[错误- 2016-03-25T13:56:28.400Z] GhostDriver - main.fail - { "线":97, "sourceURL": "phantomjs://platform/hub_register.js", "堆":"寄存器@ phantomjs://platform/hub_register.js:97:79 \nglobal code @ phantomjs://code/main.js:78:37"}
phantomjs://platform/console++.js:263错误
标准节点工作正常,但PhantomJS失败了.我做错了什么?
如何使用PhantomJS通过Webdriver记录页面加载的所有HTTP请求和响应?我正在使用python,我的超级简单测试脚本如下所示:
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://www.golem.de')
Run Code Online (Sandbox Code Playgroud)
我已经在PhantomJS中找到了这些功能:
page.onResourceRequested = function (request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将它与Selenium Webdriver和Ghostdriver结合在一起.我怎么能这样做?
我想说清楚量角器VS ghostdriver之间的区别.
用量角器:
用ghostdriver:
我的问题是PhantomJS webdriver可以单独运行,不需要selenium webdriver,多个浏览器和CI.为什么我们需要运行selenium并使用ghostdriver将selenium与phantomjs集成?
selenium phantomjs selenium-webdriver ghostdriver protractor
我用Python和Selenom和PhantomJS设置了一个简单的webscraping脚本.我总共有大约200个URL要刮掉.该脚本运行在第一再细后约20-30网址(也可以是多/少,因为它似乎随机当它失败,并且不涉及任何特定的URL)我收到以下错误蟒蛇:
selenium.common.exceptions.WebDriverException: Message: 'Can not connect to GhostDriver'
Run Code Online (Sandbox Code Playgroud)
还有我的ghostdriver.log:
PhantomJS is launching GhostDriver...
[ERROR - 2014-07-04T17:27:37.519Z] GhostDriver - main.fail - {"message":"Could not start Ghost Driver","line":82,"sourceId":140692115795456,"sourceURL":":/ghostdriver/main.js","stack":"Error: Could not start Ghost Driver\n at :/ghostdriver/main.js:82","stackArray":[{"sourceURL":":/ghostdriver/main.js","line":82}]}
Run Code Online (Sandbox Code Playgroud)
我搜索了大部分关于SO的问题似乎是他们甚至无法运行单个URL.我发现错误发生在脚本中间的唯一问题就是这个问题,答案是将phantomjs升级到我已经完成的最新版本.另一个答案只是说再次尝试该URL并不是一个好的解决方案,因为URL可能会再次失败.
我在python 2.7.6上的Linux Mint 17上运行了phantomjs版本1.9.7和selenium版本2.42.1
for url in ['example.com/1/', 'example.com/2/', 'example.com/3/', .. , ..]:
user_agent = 'Chrome'
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap['phantomjs.page.settings.userAgent'] = user_agent
driver = webdriver.PhantomJS(executable_path='/usr/bin/phantomjs', desired_capabilities=dcap)
driver.get(url)
Run Code Online (Sandbox Code Playgroud) 我一直在使用python selenium进行Web自动化测试.自动化的关键部分是为HTML页面中的用户可见对象找到正确的元素.以下API大部分时间都可以使用,但不是所有时间都可以.
find_element_by_xxx, xxx can be id, name, xpath, tag_name etc.
Run Code Online (Sandbox Code Playgroud)
当HTML页面太复杂时,我想搜索dom树.想知道是否可以要求selenium服务器序列化整个DOM(使用可用于通过webdriver服务器执行操作的元素id).客户端(python脚本)可以使用自己的搜索算法来查找正确的元素.
请注意,python selenium可以获取整个html页面
drv.page_source
Run Code Online (Sandbox Code Playgroud)
但是,解析这不会从selenium服务器的角度给出内部元素id,因此没有用处.
EDIT1:解释 它使它更清晰(感谢@alecxe):这里需要的是在selenium服务器中所有DOM元素(保留其DOM结构)的序列化表示,这个序列化表示可以发送到客户端(一个python selenium测试应用程序),可以自己搜索.
我正在使用Selenium和chrome webdriver但是当我运行脚本时它会打开一个窗口.有什么办法可以在没有窗口弹出的情况下访问互联网吗?
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://ps.rsd.edu/public/")
elem = driver.find_element_by_name("account")
elem.send_keys("Username")
elem2 = driver.find_element_by_name("pw")
elem2.send_keys("Password")
elem.send_keys(Keys.RETURN)
driver.quit()
Run Code Online (Sandbox Code Playgroud)
例如,这将进入我学校的成绩网站并输入用户名和密码,但如果可能的话,我希望在没有浏览器弹出的情况下执行此操作.
ghostdriver ×10
phantomjs ×8
selenium ×7
python ×5
java ×4
javascript ×1
protractor ×1
webdriver ×1