我正在尝试将 Selenium 与 Python 结合使用。因此,我编写了以下代码并将其保存为工作目录/Users/ykt68/seleniumwork中名为test.py 的文件。
[ykt68@macbp15 seleniumwork]$ pwd /Users/ykt68/seleniumwork [ykt68@macbp15 seleniumwork]$ cat -n test.py 1 #! /usr/bin/env python 2 # -*- encoding: utf-8 -*- 3 4 from selenium import webdriver 5 from selenium.webdriver.common.keys import Keys 6 7 driver = webdriver.Firefox() 8 driver.get("http://www.python.org") 9 assert "Python" in driver.title 10 elem = driver.find_element_by_name("q") 11 elem.clear() 12 elem.send_keys("pycon") 13 elem.send_keys(Keys.RETURN) 14 assert "No results found." not in driver.page_source 15 driver.close() [ykt68@macbp15 seleniumwork]$
以上代码与Selenium with Python文档中的2.1简单使用 相同。
当我运行上面的 test.py 的 python 命令时,
[ykt68@macbp15 seleniumwork]$ python test.py Traceback (most recent call last): File "test.py", line 7, in <module> driver = webdriver.Firefox() File "/Users/ykt68/.pyenv/versions/seleniumwork/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 80, in __init__ self.binary, timeout) File "/Users/ykt68/.pyenv/versions/seleniumwork/lib/python3.5/site-packages/selenium/webdriver/firefox/extension_connection.py", line 52, in __init__ self.binary.launch_browser(self.profile, timeout=timeout) File "/Users/ykt68/.pyenv/versions/seleniumwork/lib/python3.5/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 68, in launch_browser self._wait_until_connectable(timeout=timeout) File "/Users/ykt68/.pyenv/versions/seleniumwork/lib/python3.5/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 108, in _wait_until_connectable % (self.profile.path)) selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Profile Dir: /var/folders/86/55p1gj4j4xz2nw9g5q224bk40000gn/T/tmpf0uolidn If you specified a log_file in the FirefoxBinary constructor, check it for details. [ykt68@macbp15 seleniumwork]$
请告诉我为什么会发生此错误以及如何解决问题,或者列出一些我应该参考的帖子或文档。
此外,
[ykt68@macbp15 seleniumwork]$ python -V Python 3.5.2 [ykt68@macbp15 seleniumwork]$ /Applications/Firefox.app/Contents/MacOS/firefox -v Mozilla Firefox 48.0.2 [ykt68@macbp15 seleniumwork]$ /Applications/Firefox.app/Contents/MacOS/firefox-bin -v Mozilla Firefox 48.0.2 [ykt68@macbp15 seleniumwork]$ pip list pip (8.1.2) selenium (2.53.6) setuptools (20.10.1) [ykt68@macbp15 seleniumwork]$
pip install -U selenium
但上述错误信息的情况依然没有改变。
你遇到的错误是由于 Selenium 在使用 Firefox 时无法加载指定的配置文件。这通常与以下几个方面有关:
你使用的 Firefox 版本是 48.0.2,而 Selenium 2.53.6 版本对该版本的支持可能不够好。更新 Firefox 和 Selenium 到兼容的版本通常可以解决问题。
Selenium 2.x 版本使用的是基于 FirefoxProfile 的接口来控制 Firefox,而在后来的 Firefox 版本中,geckodriver 被引入作为 WebDriver 用于与 Firefox 进行通信。你可能没有安装 geckodriver,或者它的版本不兼容。
FirefoxProfile
geckodriver
更新 Selenium:
bash pip install -U selenium
安装 geckodriver:
bash brew install geckodriver
或者从Geckodriver 发行页面下载适合你系统的版本,并将其路径添加到环境变量 PATH 中。
PATH
确保 geckodriver 在终端可用,可以通过以下命令检查:
bash geckodriver --version
更新代码:如果你升级到 Selenium 3.x,以下代码可以直接与 Firefox 配合使用,无需使用 FirefoxProfile。
```python from selenium import webdriver
# 配置 Firefox 浏览器驱动 options = webdriver.FirefoxOptions() options.set_headless() # 如果需要无头模式
# 启动 Firefox 浏览器 driver = webdriver.Firefox(options=options) driver.get("http://www.python.org”) ```
如果你仍然使用 Selenium 2.x,可以尝试明确设置 geckodriver 路径(如果你没有将它添加到 PATH):
# 设置 geckodriver 路径 driver = webdriver.Firefox(executable_path=’/path/to/geckodriver’) driver.get("http://www.python.org”) ```
```python from selenium import webdriver from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
# 创建一个新的 Firefox 配置文件 profile = FirefoxProfile()
# 启动 Firefox 浏览器,使用这个配置文件 driver = webdriver.Firefox(firefox_profile=profile) driver.get("http://www.python.org”) ```
FirefoxOptions
通过这些步骤,应该可以解决你遇到的问题。如果仍然无法解决,可能需要根据具体的操作系统和 Firefox 版本进行进一步的调试。