4

我正在尝试将 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 中安装一些支持交互的扩展吗?

4

2 回答 2

5

不要使用 Firefox Nightly。

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

引用变化

硒 2.32

  • 支持 FF20 原生事件

硒 2.31

  • 支持 FF19 原生事件

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

如果您的 Selenium 不是最新的,请先升级

pip install -U selenium
于 2013-07-07T23:28:31.000 回答
0

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

当有时firefox扩展没有打开端口渲染python等待时,我遇到了类似的问题。

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

于 2013-07-07T17:06:12.567 回答