提问人: 提问时间:6/8/2023 更新时间:8/17/2023 访问量:2011
Selenium Chrome 网络驱动程序停止工作
Selenium Chrome webdriver stopped working
问:
我在 google Colab 中有一个脚本,它使用 Selenium 来自动执行一些 Chrome 任务。奇怪的是,这个脚本直到今天都运行良好。突然,当我运行我的脚本时,我得到了这个我以前没有得到的错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-c1c375032a08> in <cell line: 10>()
15
16 # Specify the path to chromedriver executable
---> 17 driver = webdriver.Chrome("chromedriver", options=options)
18 driver.get(url)
19 print(driver.title)
TypeError: WebDriver.__init__() got multiple values for argument 'options'
我的代码如下:
获取 Chromedriver
%%shell
# Ubuntu no longer distributes chromium-browser outside of snap
#
# Proposed solution: https://askubuntu.com/questions/1204571/how-to-install-chromium-without-snap
# Add debian buster
cat > /etc/apt/sources.list.d/debian.list <<'EOF'
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main
EOF
# Add keys
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A
apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg
apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg
apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg
# Prefer debian repo for chromium* packages only
# Note the double-blank lines between entries
cat > /etc/apt/preferences.d/chromium.pref << 'EOF'
Package: *
Pin: release a=eoan
Pin-Priority: 500
Package: *
Pin: origin "deb.debian.org"
Pin-Priority: 300
安装依赖项
!apt-get update
!apt-get install chromium chromium-driver
!pip3 install selenium
!pip install selenium
!pip3 install -U selenium
!api-get update
!api-get install -y chromium-browser
!pip3 install webdriver-manager
!apt install chromium-chromdriver
尝试运行 webdriver 的代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import WebDriverException
try:
url = "http://example.com/"
options = Options()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
driver = webdriver.Chrome("chromedriver", options=options)
driver.get(url)
print(driver.title)
driver.quit()
except WebDriverException as e:
print(str(e))
重构我的代码以删除初始参数“chromedriver”似乎有效,但我不明白为什么代码以前运行良好,而现在却没有。
答:
今天同样的事情也发生在我身上。基本上,Selenium 发布了 4.10 版,他们完全删除了一堆已弃用的代码,包括使用驱动程序的字符串路径实例化 Web 驱动程序的方法。
在这里,您可以看到正确的方法(并且从 4.10 开始只有一个): https://stackoverflow.com/a/70099102/9453904
基本上,您必须使用 Service 对象和自动 ChromeDriverManager(),它将为您下载正确的 web驱动程序:pip install webdriver-manager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
opts = Options()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)
driver.get(url)
这是由于以下方面的变化: https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8eselenium
4.10.0
请注意,第一个参数不再是 ,而是 。(这就是为什么它抱怨你把它传了两次。executable_path
options
如果你想传入一个 ,你现在必须使用 arg。executable_path
service
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(executable_path="chromedriver")
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(service=service, options=options)
# ...
driver.quit()
评论
我和你有一个类似的问题,因为我使用了来自各种互联网资源的 Debian Buster 方法。但是,即使是这种方法最近也不再对我有用。我使用以下评论部分来解决我遇到的问题:链接。如果你一直滚动到底部,人们一直在发布代码更新,让他们在 google colab 中使用 selenium。截至今天(8 月 16 日),他们底部的代码运行良好。
评论