TypeError: WebDriver.__init__()重复传入'options'参数问题求助
Selenium+YandexDriver报错:TypeError: WebDriver.init() got multiple values for argument 'options'
运行Selenium结合YandexDriver(适配Yandex浏览器)时触发错误:TypeError: WebDriver.__init__() got multiple values for argument 'options'
此前第一段代码曾正常运行,昨日突然出现问题,调整代码后仍无法解决。使用的是适配Yandex浏览器的YandexDriver,而非标准ChromeDriver。
问题代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common import keys from selenium.webdriver.support.select import Select from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select import time from tkinter import* from tkinter import* from tkinter import Frame, Tk, BOTH, Text, Menu, END from tkinter import filedialog import csv import pandas as pd from docx import Document from random import choice from docxtpl import DocxTemplate from tkcalendar import DateEntry import datetime url = 'https://elibrary.ru/' # 第一次尝试:之前正常运行,昨日报错 # options = webdriver.ChromeOptions() # options.add_experimental_option('excludeSwitches', ['enable-logging']) # binary_yandex_driver_file = 'yandexdriver.exe' # YandexDriver路径 # driver = webdriver.Chrome(binary_yandex_driver_file, options=options) # driver.get(url) # 第二次尝试:仍报错 service = Service(executable_path=r'./yandexdriver') options = webdriver.ChromeOptions() options.add_argument('--headless') binary_yandex_driver_file = 'yandexdriver.exe' driver = webdriver.Chrome(binary_yandex_driver_file, service=service, options=options) wait = WebDriverWait(driver, 10) original_window = driver.current_window_handle assert len(driver.window_handles) == 1
错误原因
Selenium 4+版本中,webdriver.Chrome()的第一个位置参数是service对象。第二次尝试的代码同时传入了位置参数binary_yandex_driver_file和关键字参数service,导致驱动路径被重复传递,进而和options参数产生冲突。
修复方案
- 仅通过
Service对象指定YandexDriver的路径,不要将驱动文件路径作为位置参数直接传给webdriver.Chrome() - 如果Yandex浏览器未安装在系统默认路径,需在
ChromeOptions中指定浏览器二进制文件路径
修正后的代码示例
from selenium import webdriver from selenium.webdriver.chrome.service import Service # 配置Service,指定YandexDriver路径 service = Service(executable_path='./yandexdriver.exe') # 配置ChromeOptions options = webdriver.ChromeOptions() options.add_argument('--headless') # 若Yandex浏览器不在默认路径,添加以下配置(替换为你的浏览器exe路径) # options.binary_location = r'C:\Users\你的用户名\AppData\Local\Yandex\YandexBrowser\Application\browser.exe' # 初始化Driver driver = webdriver.Chrome(service=service, options=options) driver.get('https://elibrary.ru/') wait = WebDriverWait(driver, 10) original_window = driver.current_window_handle assert len(driver.window_handles) == 1
内容的提问来源于stack exchange,提问作者Migika sss
相关产品推荐
相关产品推荐

