У меня есть скрипт в 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
Код, чтобы попытаться запустить веб-драйвер:
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, и они полностью удалили кучу устаревшего кода, включая такой способ создания экземпляра веб-драйвера со строковым путем к драйверу.
Здесь вы можете увидеть, как это сделать правильно (и только один из 4.10): https://stackoverflow.com/a/70099102/9453904
В основном вы должны использовать объект службы и автоматический ChromeDriverManager (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)
Это связано с изменениями в selenium4.10.0:
https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8e

Обратите внимание, что первый аргумент больше не executable_path, а options. (Вот почему он жалуется, что вы передаете его дважды.)
Если вы хотите передать 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()
Если кто-то еще найдет здесь свой путь, потому что pyhtml2pdf был затронут этой поломкой, есть пул реквест, основанный на этом ответе, который устраняет проблему: github.com/kumaF/pyhtml2pdf/pull/2
это решает вашу проблему stackoverflow.com/questions/76428561/…?