我试图在Centos服务器上从PhantomJS
内运行selenium.webdriver
。 PhantomJS在路径中并且从终端正常运行。但是在脚本中它似乎已启动,但之后无法在指定端口上访问(我尝试了2个不同的打开端口,来自我的提供程序29842和60099,它们都不工作,并且没有指定端口也没有启动它。)
错误发生在selenium.webdriver.common.utils
:
try:
socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_.settimeout(1)
socket_.connect(("localhost", port))
socket_.close()
return True
except socket.error:
return False
这是来自我的脚本(我尝试了没有任何参数以及编写可执行文件的完整路径,但都没有工作):
self.browser = webdriver.PhantomJS(
port=29842,
desired_capabilities={
'javascriptEnabled': True,
'platform': 'windows',
'browserName': 'Mozilla',
'version': '5.0',
'phantomjs.page.settings.userAgent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
}
)
这是从selenium.webdriver.phantomjs.service
初始化webdriver的脚本。我检查了subprocess.Popen
实际上是lantches phantomjs,错误发生在while循环中:
try:
self.process = subprocess.Popen(self.service_args,
stdout=self._log, stderr=self._log)
except Exception as e:
raise WebDriverException("Unable to start phantomjs with ghostdriver.", e)
count = 0
while not utils.is_connectable(self.port):
print utils.is_connectable(self.port)
count += 1
time.sleep(1)
if count == 30:
raise WebDriverException("Can not connect to GhostDriver")
所有软件包都是最新版本:python 2.7,selenium 2和phantomjs 1.9二进制文件,集成了ghostdriver。我在Ubuntu本地计算机上使相同的脚本正常工作,与我在服务器上执行的操作完全相同。服务器上有什么不同?
答案 0 :(得分:9)
升级到新版本后,我在Ubuntu上遇到了这个问题。我重新安装了所有的nodejs和python包,但我认为解决了这个问题的方法是确保nodejs
可执行文件符号链接到node
。
这些是我使用的命令:
apt-get remove node nodejs
apt-get install build-essential python-dev phantomjs npm nodejs
ln -s /usr/bin/nodejs /usr/bin/node
npm install -g phantomjs
pip install selenium bson BeautifulSoup pymongo
答案 1 :(得分:4)
在Linux上安装nodejs-legacy软件包Mint 14为我解决了这个问题。
sudo apt-get install nodejs-legacy
答案 2 :(得分:2)
对我来说,这是一个防火墙问题。幻影需要一个开放的端口来连接。如果端口被防火墙阻止,您将获得WebDriverException("Can not connect to GhostDriver")
。
修复:
sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 65000 -j ACCEPT
driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs', port=65000)
答案 3 :(得分:2)
我遇到了这个问题并找出了导致它的原因。在另一个关于开发Facebook应用程序的教程中,我被告知纳入/ etc / hosts并从中更改它 -
+(void)makeViewAccessible:(UIView *)view {
for(UIView *subview in [view subviews]){
if([subview isMemberOfClass:[UIView class]]){
[self makeStaticViewAccessible:subview];
}else if([subview isMemberOfClass:[UILabel class]]){
[subview setIsAccessibilityElement:YES];
[subview setAccessibilityTraits:UIAccessibilityTraitStaticText];
} else if([subview isMemberOfClass:[UIImageView class]]){
[subview setIsAccessibilityElement:YES];
[subview setAccessibilityTraits:UIAccessibilityTraitImage];
}
}
}
到此 -
127.0.0.1 localhost
并保存文件。顺便说一句,之后PhantomJS()不再工作了。我刚回到/ etc / hosts文件并将其切换回localhost
127.0.0.1 test1.com
它再次有效。
答案 4 :(得分:1)
我正在测试一个使用selenium和phantomjs的python / django应用程序。在第一次(有时是第二次测试)期间一切正常,但是一旦运行下一次测试,selenium就会打印完全相同的错误信息。
此外,如果我之后从控制台运行了phantomjs,我收到以下节点错误:
child_process.js:1136 var err = this._handle.spawn(options);
^
TypeError: Bad argument
at TypeError (native)
at ChildProcess.spawn (child_process.js:1136:26)
at exports.spawn (child_process.js:995:9)
at Object.<anonymous> (/usr/local/lib/node_modules/phantomjs/bin/phantomjs:22:10)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:320)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
我尝试过几次通过npm(本地和全局)重新安装phantomjs,但行为仍然存在。
最终,我通过npm卸载了phantomjs并从phantomjs.org下载了phantomjs bin 。把它放在我的/ usr / local / bin里面(我在MacOS上)并且从那以后就摆脱了错误!