selenium - 无法在 PATH 中找到 chromedriver,或者在显式提供给 webdriver.Chrome() 时
问题描述
我正在尝试在 Windows 10 上将 chromedriver 与 Selenium 一起使用,但出现以下错误:
Traceback (most recent call last):
File "scrape.py", line 4, in <module>
driver = webdriver.Chrome()
File "C:\Python37\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__
self.service.start()
File "C:\Python37\lib\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: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
这是我的测试脚本:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
我已经尝试了很多东西。下面我会详细介绍。
我试图将路径添加chromedriver
到 PATH。图片在这里:
这很好用,因为我可以从命令行运行chromedriver
:
C:\Users\KraftWurk>chromedriver
Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
但是,当我运行我的脚本时,我得到了chromedriver
需要在 PATH 中的错误......它是,所以不确定那里发生了什么。
我已阅读以下内容:Python Selenium Chrome Webdriver
我尝试使用以下方法提供建议的路径:
driver = webdriver.Chrome(executable_path=r"C:\drivers\chromedriver.exe")
我仍然收到同样的警告。
我不太确定发生了什么事。我在 Windows 10 上使用 Python 3.7。Selenium 3.141.0 和 Chromedriver 74.0.3729.6
解决方案
为了消除大量手动工作和不兼容问题,我建议您使用 WebDriverManager,因为它会自动下载所需的二进制文件,我们不需要设置任何路径。
它支持 Chrome、Firefox、PhantomJS、Microsoft Edge 或 Internet Explorer 等浏览器。
我们如何在我们的项目中使用它?
仅需要设置是使用“pip”安装此软件包。
点安装 webdriver_manager
而已!我们都准备好了。只需将此模块导入您的 python 项目并开始使用它。
对于铬:
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
driver.get("http://www.google.com/")
print driver.title
driver.quit()
对于火狐:
from webdriver_manager.firefox import GeckoDriverManager
from selenium import webdriver
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("http://www.google.com/")
print driver.title
driver.quit()
对于边缘:
from webdriver_manager.microsoft import EdgeDriverManager
from selenium import webdriver
driver = webdriver.Edge(executable_path=EdgeDriverManager().install())
driver.get("http://www.google.com/")
print driver.title
driver.quit()
对于 IE:
from webdriver_manager.microsoft import IEDriverManager
from selenium import webdriver
driver = webdriver.Ie(executable_path=IEDriverManager().install())
driver.get("http://www.google.com/")
print driver.title
driver.quit()
默认情况下,webdriver_manager 会尝试下载给定驱动程序二进制文件的最新版本。要使用特定版本的驱动程序,请传递驱动程序版本,如下所示。
webdriver.Chrome(executable_path=ChromeDriverManager("2.42").install())
推荐阅读
- regex - 用于在引号之间捕获的正则表达式,包括跳过的引号
- c# - 我的 Unity 面板不是我想要的颜色
- javascript - 我想动态导入图像,但我运行项目我没有看到图像
- google-sheets - 我们可以使用谷歌表单脚本验证来自谷歌表单的响应是否存在输入的值?
- java - 单选按钮在 Android 中返回错误的值
- amazon-dynamodb - 有没有办法在不获取整行的情况下获取 Dynamodb 中 SET 类型的属性的大小?
- javascript - JS innerHTML 不显示
- javascript - 区域 asp.net cor mvc 的 Url.Action
- c++ - 如何在类中定义 libusb_log_cb 函数?
- php - PHP - 检测预期会话