Selenium Chrome 网络驱动程序停止工作

Selenium Chrome webdriver stopped working

提问人: 提问时间:6/8/2023 更新时间:8/17/2023 访问量:2011

问:

我在 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-webdriver selenium-chromedriver

评论

0赞 Ajeet Verma 6/8/2023
这能解决您的问题吗 stackoverflow.com/questions/76428561/...
0赞 6/8/2023
你好!谢谢你的评论。实际上,我已经尝试过了,但我仍然遇到同样的错误

答:

0赞 Leonardo Kuffo 6/8/2023 #1

今天同样的事情也发生在我身上。基本上,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)
1赞 Michael Mintz 6/8/2023 #2

这是由于以下方面的变化: https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8eselenium4.10.0

Changes_in_selenium_4_10_0

请注意,第一个参数不再是 ,而是 。(这就是为什么它抱怨你把它传了两次。executable_pathoptions

如果你想传入一个 ,你现在必须使用 arg。executable_pathservice

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()

评论

0赞 macnewbold 6/10/2023
如果其他人因为 pyhtml2pdf 受到此损坏的影响而找到自己的方式,则有一个基于此答案的拉取请求可以解决问题:github.com/kumaF/pyhtml2pdf/pull/2
0赞 Ferdaws Rashid 8/17/2023 #3

我和你有一个类似的问题,因为我使用了来自各种互联网资源的 Debian Buster 方法。但是,即使是这种方法最近也不再对我有用。我使用以下评论部分来解决我遇到的问题:链接。如果你一直滚动到底部,人们一直在发布代码更新,让他们在 google colab 中使用 selenium。截至今天(8 月 16 日),他们底部的代码运行良好。

评论

0赞 Community 8/20/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。