使用Splinter填充Web表单时遭遇geckodriver路径错误求助
嘿,刚接触Splinter就遇到这个小问题很正常,别慌!你碰到的geckodriver路径错误是用Firefox做Splinter浏览器驱动时的常见坑,我来给你拆解解决步骤:
首先明确问题根源:从Firefox 47版本开始,Selenium不再支持Firefox的内置驱动,必须用geckodriver来做桥接,系统找不到这个可执行文件就会抛出你看到的错误:
File "/Library/Python/2.7/site-packages/selenium/webdriver/common/service.py", line 83, in start os.path.basename(self.path), self.start_error_message) selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH
下面是两种靠谱的解决方法:
方法一:把geckodriver加入系统PATH(推荐长期使用)
步骤1:下载匹配的geckodriver
去Mozilla官方仓库下载和你的Firefox版本对应的geckodriver(要选对自己的系统:macOS/Linux/Windows),解压后会得到一个可执行文件(Windows是.exe格式)。
步骤2:配置系统PATH
macOS/Linux用户:
最简单的方式是把geckodriver移到默认在PATH里的目录,比如/usr/local/bin,打开终端执行:sudo mv /你下载后解压的geckodriver路径 /usr/local/bin/要是不想动文件位置,也可以把geckodriver所在的目录添加到PATH中:
编辑~/.bash_profile或者~/.zshrc(看你用的是bash还是zsh),加入一行:export PATH="$PATH:/存放geckodriver的文件夹路径"保存后执行
source ~/.bash_profile(对应你编辑的文件)让配置生效。Windows用户:
把geckodriver.exe放到C:\Windows\System32目录(这个目录默认在PATH里),或者右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,找到系统变量里的PATH,点击编辑,把geckodriver所在的文件夹路径加进去,确定后重启终端或IDE。
方法二:在代码中直接指定geckodriver路径(快速测试用)
如果不想改系统配置,也可以在初始化Splinter的Browser时,直接指定executable_path参数,修改你的代码如下:
from splinter import Browser # 整理一下表单数据,让代码更清晰 firstname = 'my_first_name_here' lastname = 'my_last_name_here' email_address = 'my_email_here' # 这里替换成你自己的geckodriver绝对路径 # Windows用户注意用双反斜杠或者原始字符串,比如 r'C:\xxx\geckodriver.exe' browser = Browser('firefox', executable_path='/你的geckodriver绝对路径/geckodriver') # 访问页面并填充表单 browser.visit('https://www.nba.com/playoffdrive/') browser.find_by_id('First Name').first.find_by_tag('input').fill(firstname) browser.find_by_id('Last Name').first.find_by_tag('input').fill(lastname) browser.find_by_id('Email Address').first.find_by_tag('input').fill(email_address) browser.find_by_js('submit').first.click() print(browser.url) print(browser.title) print(browser.html)
配置好之后重新运行脚本,应该就不会再报那个路径错误啦。另外给你个小建议:把变量定义和导入语句分开,代码可读性会更好哦~
内容的提问来源于stack exchange,提问作者ColinnnnG

