我在 Raspbian
操作系统( headless 设备)上使用 Python 2.7.3
、selenium 2.48.0
。 Iceweasel/Firefox
的版本是 38.4
。
我像这样导入 selenium
:
from selenium import webdriver
然后我定义驱动程序:
browser = webdriver.Firefox()
当我运行这段代码时,它运行了大约 15 秒并给出了这个错误:
Traceback (most recent call last):
File "Dbfull3.py", line 114, in <module>
data=getdata()
File "Dbfull3.py", line 17, in getdata
browser = webdriver.Firefox()
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 77, in __init__
self.binary, timeout),
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 49, in __init__
self.binary.launch_browser(self.profile)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 68, in launch_browser
self._wait_until_connectable()
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 103, in _wait_until_connectable
raise WebDriverException("Can't load the profile. Profile "
selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Profile Dir: %s If you specified a log_file in the FirefoxBinary constructor, check it for details.
在研究这个错误时,我在 StackOverflow
和其他地方发现了类似的情况,但很多是来自 Windows
环境或错误来自不同的包。一个建议的解决方案是使用不同版本的 Firefox/Iceweasel
,但我找不到适用于我的 OS
的其他版本。
我也尝试以 root
身份执行我的代码,但结果是一样的。
尽管有错误,每次执行此命令时,新的配置文件都会创建到 /tmp
:
user@host ~/bin $ ls -l /tmp/tmpiV4R0H/
total 11952
drwxr-xr-x 2 user user 4096 Dec 10 18:42 amd64
-rw-r--r-- 1 user user 183494 Dec 10 18:42 blocklist.xml
drwx------ 2 user user 4096 Dec 10 18:43 bookmarkbackups
drwx------ 4 user user 4096 Dec 10 18:42 cache2
-rw------- 1 user user 65536 Dec 10 18:43 cert8.db
-rw------- 1 user user 188 Dec 10 18:42 compatibility.ini
-rw-r--r-- 1 user user 229376 Dec 10 18:42 content-prefs.sqlite
-rw-r--r-- 1 user user 524288 Dec 10 18:43 cookies.sqlite
-rw------- 1 user user 4182 Dec 10 18:43 directoryLinks.json
drwxr-xr-x 3 user user 4096 Dec 10 18:42 extensions
-rw-r--r-- 1 user user 259 Dec 10 18:42 extensions.ini
-rw------- 1 user user 2154 Dec 10 18:43 extensions.json
drwx------ 2 user user 4096 Dec 10 18:42 gmp
-rw------- 1 user user 16384 Dec 10 18:42 key3.db
lrwxrwxrwx 1 user user 16 Dec 10 18:42 lock -> 127.0.1.1:+29581
-rw-r--r-- 1 user user 3319 Dec 10 18:43 mimeTypes.rdf
-rw-r--r-- 1 user user 65536 Dec 10 18:42 permissions.sqlite
-rw-r--r-- 1 user user 10485760 Dec 10 18:43 places.sqlite
-rw-r--r-- 1 user user 32768 Dec 10 18:42 places.sqlite-shm
-rw-r--r-- 1 user user 557496 Dec 10 18:43 places.sqlite-wal
-rw------- 1 user user 5020 Dec 10 18:43 prefs.js
-rw------- 1 user user 16384 Dec 10 18:42 secmod.db
-rw------- 1 user user 53 Dec 10 18:43 sessionCheckpoints.json
drwxr-xr-x 2 user user 4096 Dec 10 18:42 startupCache
drwx------ 2 user user 4096 Dec 10 18:43 userumbnails
-rw-r--r-- 1 user user 3504 Dec 10 18:42 user.js
drwxr-xr-x 2 user user 4096 Dec 10 18:42 webapps
drwxr-xr-x 2 user user 4096 Dec 10 18:42 x86
我该怎么做才能摆脱这个错误?
编辑:我还设置了一个虚拟显示以允许 Firefox 启动。此代码在浏览器之前执行。
from pyvirtualdisplay import Display
display = Display(visible=0, size=(640, 480))
display.start()
我认为这部分没问题,因为在添加这些行之前,Selenium 给出了缺少显示的错误。使用此代码,Firefox 至少可以开始创建一些配置文件。
当我这样做时,Firefox 也会启动:
Xvfb :99
export DISPLAY=:99
firefox
(Firefox just sits there, but does not give errors.)
EDIT2:我也尝试使用 Chromium
而不是 Firefox
但这不起作用,因为他们的 Selenium
网络驱动程序不适用于 树莓派
。
最佳答案
最后我通过使用 PhantomJS
而不是 Selenium
解决了我的问题。
Raspberry Pi 没有官方二进制文件,编译速度非常慢,所以我使用了 Github
中的二进制文件:https://github.com/piksel/phantomjs-raspberrypi/
关于 python Selenium : Firefox profile error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34208288/