使用Python的Selenium-Geckodriver可执行文件需要在路径中
我是编程新手,大约两个月前开始学习Python,现在我将复习斯维加特的《用Python文本自动化无聊的东西》。我正在使用并且已经安装了Selenium模块和Firefox浏览器 每当我尝试运行webdriver函数时,我都会得到以下结果:使用Python的Selenium-Geckodriver可执行文件需要在路径中,python,selenium,firefox,selenium-firefoxdriver,geckodriver,Python,Selenium,Firefox,Selenium Firefoxdriver,Geckodriver,我是编程新手,大约两个月前开始学习Python,现在我将复习斯维加特的《用Python文本自动化无聊的东西》。我正在使用并且已经安装了Selenium模块和Firefox浏览器 每当我尝试运行webdriver函数时,我都会得到以下结果: from selenium import webdriver browser = webdriver.Firefox() 例外情况: Exception ignored in: <bound method Service.__del__ of <
from selenium import webdriver
browser = webdriver.Firefox()
例外情况:
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
中忽略的异常:
回溯(最近一次呼叫最后一次):
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\common\service.py”,第163行,在__
self.stop()
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\common\service.py”,第135行,在stop中
如果self.process为无:
AttributeError:“服务”对象没有属性“进程”
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\common\service.py”,第163行,在__
self.stop()
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\common\service.py”,第135行,在stop中
如果self.process为无:
AttributeError:“服务”对象没有属性“进程”
回溯(最近一次呼叫最后一次):
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\common\service.py”,第64行,在开始处
stdout=self.log\u文件,stderr=self.log\u文件)
文件“C:\Python\Python35\lib\subprocess.py”,第947行,在\uuu init中__
恢复信号,启动新会话)
文件“C:\Python\Python35\lib\subprocess.py”,第1224行,在执行子进程中
startupinfo)
FileNotFoundError:[WinError 2]系统找不到指定的文件
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
browser=webdriver.Firefox()
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\firefox\webdriver.py”,第135行,在\uuu init中__
self.service.start()
文件“C:\Python\Python35\lib\site packages\selenium\webdriver\common\service.py”,第71行,在开始处
os.path.basename(self.path)、self.start\u错误消息)
selenium.common.exceptions.WebDriverException:消息:“geckodriver”可执行文件需要位于路径中。
我想我需要为geckodriver
设置路径,但我不确定如何设置,所以我该如何设置
selenium.common.exceptions.WebDriverException:消息:“geckodriver”可执行文件需要位于路径中
实际上,Selenium客户端绑定试图从系统路径中定位geckodriver
可执行文件。您需要将包含可执行文件的目录添加到系统路径
- 在Unix系统上,如果使用的是与Bash兼容的shell,则可以执行以下操作将其附加到系统的搜索路径:
export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
- 在Windows上,您需要更新Path系统变量以将完整目录路径添加到可执行geckodriver或**(在将可执行geckodriver添加到系统路径后,不要忘记重新启动系统以生效)**。其原理与在Unix上相同
现在,您可以按如下操作运行代码:-
from selenium import webdriver
browser = webdriver.Firefox()
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
selenium.common.exceptions.WebDriverException:消息:预期的浏览器二进制位置,但在默认位置找不到二进制,未提供“moz:firefoxOptions.binary”功能,并且在命令行上未设置二进制标志
例外情况清楚地表明,当Selenium试图查找Firefox并从默认位置启动时,您已经在其他位置安装了Firefox,但它找不到它。您需要明确提供Firefox安装的二进制位置以启动Firefox,如下所示:-
from selenium import webdriver
browser = webdriver.Firefox()
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
对于Windows:
从GitHub下载该文件,将其解压缩并粘贴到Python文件中。这对我有用
对我来说,我的道路是:
C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39
这些步骤为我在Ubuntu和Firefox50上解决了这个问题
下载
将geckodriver复制到文件夹/usr/local/bin
您不需要添加:
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
真的很遗憾,在Selenium/Python上出版的书籍和通过Google发表的关于这个问题的大多数评论都没有清楚地解释在Mac上设置它的路径逻辑(一切都是Windows!!!!)。YouTube上的视频都是在你有了路径设置(在我看来,这是一条廉价的出路!)之后才开始播放的。因此,对于出色的Mac用户,请使用以下命令编辑Bash路径文件:
touch ~/.bash_profile; open ~/.bash_profile*
然后添加一个类似于这样的路径
# Setting PATH for geckodriver
PATH=“/usr/bin/geckodriver:${PATH}”
export PATH
# Setting PATH for Selenium Firefox
PATH=“~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}”
export PATH
# Setting PATH for executable on Firefox driver
PATH=“/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}”
export PATH*
这对我有用。我担心的是,Selenium Windows社区什么时候开始玩真正的游戏,并将我们Mac用户纳入他们傲慢的俱乐部成员。由@saurabh给出的答案解决了这个问题,但它没有解释为什么用Python自动化无聊的东西不包括这些步骤
这是因为本书基于Selenium 2.x,该系列的Firefox驱动程序不需要Gecko驱动程序。在开发Selenium时,驱动浏览器的Gecko界面不可用
Selenium 2.x系列中的最新版本是2.53.6(参见示例[这些答案][2],以便更容易地查看版本)
[2.53.6版本页面][3]根本没有提到壁虎。但是由于3.0.2版的文档[明确声明][4]您需要安装Gecko驱动程序
如果升级(或安装到新系统上)后,以前运行良好的软件(或旧系统上的)不再运行,并且您很匆忙,请通过执行以下操作将Selenium版本固定到virtualenv中
pip install selenium==2.53.6
当然,开发的长期解决方案是使用最新版本的selenium安装一个新的virtualenv,安装Gecko驱动程序,并测试一切是否仍按预期工作
但是主要版本的改动可能会引入您的书中未涉及的其他API更改,因此您可能希望继续使用较旧的Selenium,直到您有足够的信心自己修复Selenium 2和Selenium 3 API之间的任何差异
[2] :)
[3]:
[
driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')
PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH
def download(url):
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
browser = webdriver.Firefox(capabilities=firefox_capabilities,
executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
browser.get(url)
return browser.page_source
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
def __init__(self, firefox_profile=None, firefox_binary=None,
timeout=30, capabilities=None, proxy=None,
executable_path="/PATH/gecko/geckodriver",
firefox_options=None,
log_path="/PATH/geckodriver.log"):
self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')
self.driver = webdriver.Firefox()
./installer --gecko-driver https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.25.0-linux64.tar.gz
$ brew install geckodriver
C:\Users\Bhavya\Anaconda2\Scripts
import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';
from selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title
conda install -c conda-forge geckodriver
from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")
export GV=v0.29.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz
chmod +x geckodriver
sudo cp geckodriver /usr/local/bin/
geckodriver-$GV-macos.tar.gz
from webdriverdownloader import GeckoDriverDownloader # vs ChromeDriverDownloader vs OperaChromiumDriverDownloader
gdd = GeckoDriverDownloader()
gdd.download_and_install()
#gdd.download_and_install("v0.19.0")
from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\\Users\\username\\\bin\\geckodriver.exe')
driver.get('https://www.amazon.com/')
pip install webdriver-manager
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
docker pull selenium/standalone-firefox
docker run --rm -d -p 5555:4444 --shm-size=2g selenium/standalone-firefox
driver = webdriver.Remote('http://localhost:5555/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://toolbox.googleapps.com/apps/browserinfo/')
driver.save_screenshot('info.png')
$ brew install geckodriver
from selenium import webdriver
browser = webdriver.Firefox()
wolf@linux:~$ python -m pip install webdriver-manager
Collecting webdriver-manager
Using cached https://files.pythonhosted.org/packages/9c/6c/b52517f34e907fef503cebe26c93ecdc590d0190b267d38a251a348431e8/webdriver_manager-3.2.1-py2.py3-none-any.whl
... output truncated ...
Installing collected packages: configparser, colorama, crayons, certifi, chardet, urllib3, idna, requests, webdriver-manager
Successfully installed certifi-2020.6.20 chardet-3.0.4 colorama-0.4.3 configparser-5.0.0 crayons-0.3.1 idna-2.10 requests-2.24.0 urllib3-1.25.9 webdriver-manager-3.2.1
wolf@linux:~$
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
wolf@linux:~$ python
Python 3.7.5 (default, Nov 7 2019, 10:50:52)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from selenium import webdriver
>>> from webdriver_manager.firefox import GeckoDriverManager
>>>
>>> driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
[WDM] - There is no [linux64] geckodriver for browser in cache
[WDM] - Getting latest mozilla release info for v0.26.0
[WDM] - Trying to download new driver from https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
[WDM] - Driver has been saved in cache [/home/wolf/.wdm/drivers/geckodriver/linux64/v0.26.0]
>>>
cp /home/$(whoami)/.wdm/drivers/geckodriver/linux64/v0.26.0/geckodriver /home/$(whoami)/.local/bin/
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://seleniumhq.org/')
sudo cp geckodriver /usr/local/bin
$ geckodriver
Command 'geckodriver' not found, but it can be installed with:
sudo apt install firefox-geckodriver
$
sudo apt install firefox-geckodriver
$ which geckodriver
/usr/bin/geckodriver
$
$ geckodriver
1337 geckodriver INFO Listening on 127.0.0.1:4444
^C