如何解决Python Selenium Geckodriver应该在PATH中
我正在尝试使用Selenium自动填写表格。这是HTML代码:
<!DOCTYPE html>
<html>
<body>
<h2>Text input fields</h2>
<form>
<label for="fname">First name:</label><br>
<input type="text" id="fname" name="fname" value="John"><br>
<label for="lname">Last name:</label><br>
<input type="text" id="lname" name="lname" value="Doe"><br>
<label for="cars">Choose a car:</label>
<select id="cars" name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select><br>
<textarea name="message" rows="10" cols="30">The cat was playing in the garden.</textarea>
</form>
这是Python / Selenium代码:它表示Geckodriver必须位于PATH中。以前,当我收到此错误时,我指定了可执行路径,但似乎不再起作用。我在做什么错了?
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox(executable_path="C:\Users\Anna\Downloads\geckodriver")
driver.get("example form.html")
#First name
element = driver.find_element_by_name("fname")
element.clear()
element.send_keys("Anna")
#Last name
element = driver.find_element_by_name("lname")
element.clear()
element.send_keys("Zharavina")
#Dropdown list | Car selection
select = Select(driver.find_element_by_name("cars"))
select.deselect_all()
select.select_by_value(volvo)
#Textarea
element = driver.find_element_by_name("message")
element.clear()
element.send_keys("Test message 10013341381")
这是我得到的错误:
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/selenium/webdriver/common/service.py",line 72,in start
self.process = subprocess.Popen(cmd,env=self.env,File "/usr/lib/python3.8/subprocess.py",line 854,in __init__
self._execute_child(args,executable,preexec_fn,close_fds,line 1702,in _execute_child
raise child_exception_type(errno_num,err_msg,err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver.exe'
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "main.py",line 7,in <module>
driver = webdriver.Firefox(executable_path="geckodriver.exe")
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/selenium/webdriver/firefox/webdriver.py",line 164,in __init__
self.service.start()
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/selenium/webdriver/common/service.py",line 81,in start
raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'geckodriver.exe' executable needs to be in PATH.
我在做什么错了?
解决方法
尝试将\
中的/
替换为executable_path
。
替换为:
driver = webdriver.Firefox(executable_path="C:\Users\Anna\Downloads\geckodriver")
具有:
driver = webdriver.Firefox(executable_path="C:/Users/Anna/Downloads/geckodriver")
或者您可以将geckodriver移到保存源代码的目录中。然后,您将不需要提供可执行路径。
driver = webdriver.Firefox() #will also work fine
,
当前的代码有两个问题;比较容易的一种-将路径传递给驱动程序的方式。
在Python字符串中,字符\
被称为转义字符,用于指定特殊字符(如\n
用于换行)。
因此,如果您需要实际使用它(如在路径中使用),则需要自己逃脱;同样,Windows中的可执行文件通常带有扩展名“ .exe”,您已将其省略。因此,该调用中的适当参数为:
driver = webdriver.Firefox(executable_path="C:\\Users\\Anna\\Downloads\\geckodriver.exe")
您还可以使用Python的raw strings,而不用转义\
字符:
driver = webdriver.Firefox(executable_path=r"C:\Users\Anna\Downloads\geckodriver.exe")
driver.get(“ example form.html”)
现在有一个更大的问题,那就是分辨率完全在您手中-通过异常堆栈跟踪,很明显,您正在某些Linux OS环境中运行该脚本。同时,您要传递的geckodriver位于Windows驱动器中,并且具有这样的可执行文件。
您必须更改两者之一-在Windows中运行它,或者将路径传递到Linux geckodriver可执行文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。