小能豆

Python3.5 和 FF48 使用 Selenium WebDriver 时出现“无法加载配置文件”错误

py

我正在尝试将 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 命令时,

  • FireFox 浏览器启动并打开一个空白标签。
  • 大约 30 秒后,显示以下错误消息并关闭 FireFox 窗口。
[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]$

请告诉我为什么会发生此错误以及如何解决问题,或者列出一些我应该参考的帖子或文档。

此外,

  1. 环境:
  2. 操作系统:Apple OS X 版本 10.11.6
  3. Python版本:3.5.2
  4. FireFox 版本:48.0.2
  5. 硒版本:2.53.6
[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

但上述错误信息的情况依然没有改变。


阅读 5

收藏
2024-11-20

共1个答案

小能豆

你遇到的错误是由于 Selenium 在使用 Firefox 时无法加载指定的配置文件。这通常与以下几个方面有关:

1. Firefox 版本不兼容

你使用的 Firefox 版本是 48.0.2,而 Selenium 2.53.6 版本对该版本的支持可能不够好。更新 Firefox 和 Selenium 到兼容的版本通常可以解决问题。

2. Geckodriver 缺失或不兼容

Selenium 2.x 版本使用的是基于 FirefoxProfile 的接口来控制 Firefox,而在后来的 Firefox 版本中,geckodriver 被引入作为 WebDriver 用于与 Firefox 进行通信。你可能没有安装 geckodriver,或者它的版本不兼容。

解决步骤

1. 更新 Selenium 和 Firefox

  • 升级到 Selenium 3.x 或更高版本,Selenium 3.x 引入了对 geckodriver 的支持,能够更好地与较新的 Firefox 版本兼容。
  • 升级你的 Firefox 到最新版本。如果可能,建议升级到 Firefox 的 ESR(Extended Support Release)版本,以便与 Selenium 的最新版本兼容。

更新 Selenium:

bash pip install -U selenium

2. 安装 geckodriver

  • 如果你的 Firefox 版本是较新的版本(例如,60.x 及更高版本),你需要安装 geckodriver

安装 geckodriver

bash brew install geckodriver

或者从Geckodriver 发行页面下载适合你系统的版本,并将其路径添加到环境变量 PATH 中。

确保 geckodriver 在终端可用,可以通过以下命令检查:

bash geckodriver --version

3. 更新 Firefox 配置

  • 由于 Selenium 2.x 在启动 Firefox 时仍然依赖于 Firefox 配置文件 (FirefoxProfile),可以尝试禁用 FirefoxProfile 配置,或直接使用新的 Selenium 3.x API。

更新代码:如果你升级到 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):

```python
from selenium import webdriver

# 设置 geckodriver 路径
driver = webdriver.Firefox(executable_path=’/path/to/geckodriver’)
driver.get("http://www.python.org”)
```

4. 清理 Firefox 配置

  • 你遇到的错误表明 Selenium 无法加载 Firefox 配置文件。尝试清理 Firefox 的配置文件,或在启动时创建新的临时配置文件。

```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”)
```

总结

  • 升级到 Selenium 3.x 及以上版本,并安装 geckodriver
  • 确保 geckodriver 在系统 PATH 中可用。
  • 使用新版 Firefox 和新版 Selenium 配合时,避免使用过时的 FirefoxProfile 配置方法,直接使用 FirefoxOptionsgeckodriver

通过这些步骤,应该可以解决你遇到的问题。如果仍然无法解决,可能需要根据具体的操作系统和 Firefox 版本进行进一步的调试。

2024-11-20