Selenium:_wait_until_connectable无限期暂停

时间:2013-07-07 16:28:48

标签: python firefox browser selenium selenium-webdriver

我正在尝试使用Python和Selenium来编写Firefox脚本,并在他们的网站上给出了示例:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
assert "Google" in driver.title
driver.close()

当我运行此代码时,它成功打开了一个新的Firefox窗口,但没有任何反应。浏览器是响应式的,可以加载其他页面,但Selenium由于某种原因拒绝与它合作。

当我退出Python脚本时,这是输出:

^CTraceback (most recent call last):
  File "ha.py", line 5, in <module>
    driver = webdriver.Firefox()
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 46, in __init__
    self.binary, timeout),
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 46, in __init__
    self.binary.launch_browser(self.profile)
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 44, in launch_browser
    self._wait_until_connectable() 
  File "/usr/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 89, in _wait_until_connectable
    time.sleep(1)
KeyboardInterrupt

它似乎在函数_wait_until_connectable中进入无限循环。

什么似乎导致了这个问题,如何让Selenium让Firefox变得“可连接”?

我浏览了firefox_binary.py源代码,注意到它在评论中提到了“扩展名”。我应该在Firefox中安装一些支持交互的扩展吗?

2 个答案:

答案 0 :(得分:4)

不要每晚使用Firefox。

Firefox对大多数版本进行了一些更改,Selenium需要在Firefox升级后赶上。

引自CHANGES

  

Selenium 2.32

     
      
  • 支持FF20原生事件
  •   
     

Selenium 2.31

     
      
  • 支持FF19原生事件
  •   

看到了吗? Selenium总是需要赶上新的Firefox(例如这里的本地事件)。 假设你的Selenium是最新的2.33.0,那么可能会尝试降级你的Firefox(Nightly是25,所以降级到21应该可以工作,20肯定会工作)。

如果您的Selenium不是最新版本,请先按

升级
pip install -U selenium

答案 1 :(得分:0)

确保您的FirefoxSelenium是最新的,并且您的Selenium版本支持您的浏览器。您可能遇到的是Selenium启动了一个名为 Webdriver 的特定扩展名的firefox实例。反过来,这会打开一个特定的端口,你的python selenium客户端正试图连接以发送命令。 这是你的python selenium客户端和浏览器相互通信的方式。

我有一个类似的问题,有时firefox扩展程序没有打开端口呈现python等待卡住。

你可以尝试设置一个selenium服务器并连接到它而不是创建一个新的firefox实例,或者一旦你确定它在扩展或python绑定中的回归尝试降级firefox和selenium(不要降级其中只有一个,因为扩展可能与firefox版本紧密相关,协议可能在某些时候发生了变化)