You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium报错TypeError:WebDriver.__init__()不支持executable_path参数

问题描述

我是编程新手,运行一段生成Discord诈骗二维码的Python代码时遇到错误。代码中使用webdriver.Chrome(options=options, executable_path=r'chromedriver.exe')启动Chrome浏览器时,抛出TypeError:WebDriver.__init__() got an unexpected keyword argument 'executable_path'。尝试安装旧版Selenium可解决该报错,但旧版Selenium无法兼容新版Chrome。需要修复代码,使其能够正常连接新版Chrome并完成后续的页面操作、二维码生成及Token获取等功能。

原代码

from bs4 import BeautifulSoup
from selenium import webdriver
from PIL import Image
import base64
import time
import os

# Developer: Parad1st
# Educational purposes only

def logo_qr():
    im1 = Image.open('temp/qr_code.png', 'r')
    im2 = Image.open('temp/overlay.png', 'r')
    im2_w, im2_h = im2.size
    im1.paste(im2, (60, 55))
    im1.save('temp/final_qr.png', quality=95)

def paste_template():
    im1 = Image.open('temp/template.png', 'r')
    im2 = Image.open('temp/final_qr.png', 'r')
    im1.paste(im2, (120, 409))
    im1.save('discord_gift.png', quality=95)

def main():
    print('https://github.com/Parad1st/Discord-Scam-QR')
    print('** QR Code Scam Generator by Parad1st **')

    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    options.add_experimental_option('detach', True)
    driver = webdriver.Chrome(options=options, executable_path=r'chromedriver.exe')

    driver.get('https://discord.com/login')
    time.sleep(5)
    print('- Page has been loaded.')

    page_source = driver.page_source

    soup = BeautifulSoup(page_source, features='lxml')

    div = soup.find('div', {'class': 'qrCode-wG6ZgU'})
    qr_code = div.find('img')['src']
    file = os.path.join(os.getcwd(), 'temp/qr_code.png')

    img_data =  base64.b64decode(qr_code.replace('data:image/png;base64,', ''))

    with open(file,'wb') as handler:
        handler.write(img_data)

    discord_login = driver.current_url
    logo_qr()
    paste_template()

    print('- QR Code has been generated. > discord_gift.png ')
    print('Send the QR Code to user and scan. Waiting..')
    
    while True:
        if discord_login != driver.current_url:
            print('Grabbing token..')
            token = driver.execute_script('''

    var req = webpackJsonp.push([
        [], {
            extra_id: (e, t, r) => e.exports = r
        },
        [
            ["extra_id"]
        ]
    ]);
    for (let e in req.c)
        if (req.c.hasOwnProperty(e)) {
            let t = req.c[e].exports;
            if (t && t.__esModule && t.default)
                for (let e in t.default) "getToken" === e && (token = t.default.getToken())
        }
    return token;   
                ''')
            print('---')
            print('Token grabbed:',token)
            break

    print('Task complete. Успех!')

if __name__ == '__main__':
    main()

错误信息

Traceback (most recent call last):
  File "C:\Users\Parad1st\Desktop\Discord-QR-Scam-main\qr_generator.py", line 87, in <module>
    main()
  File "C:\Users\Parad1st\Desktop\Discord-QR-Scam-main\qr_generator.py", line 33, in main
    driver = webdriver.Chrome(options=options, executable_path=r'chromedriver.exe')
TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'
修复方案

核心原因

Selenium 4.x版本彻底移除了executable_path参数,改用Service类来管理浏览器驱动路径。

修复步骤

  1. 确保安装最新版Selenium:
pip install --upgrade selenium
  1. 修改代码中驱动初始化部分,导入ChromeService并使用它指定驱动路径:

修改后的完整代码

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service  # 新增导入
from PIL import Image
import base64
import time
import os

# Developer: Parad1st
# Educational purposes only

def logo_qr():
    im1 = Image.open('temp/qr_code.png', 'r')
    im2 = Image.open('temp/overlay.png', 'r')
    im2_w, im2_h = im2.size
    im1.paste(im2, (60, 55))
    im1.save('temp/final_qr.png', quality=95)

def paste_template():
    im1 = Image.open('temp/template.png', 'r')
    im2 = Image.open('temp/final_qr.png', 'r')
    im1.paste(im2, (120, 409))
    im1.save('discord_gift.png', quality=95)

def main():
    print('https://github.com/Parad1st/Discord-Scam-QR')
    print('** QR Code Scam Generator by Parad1st **')

    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    options.add_experimental_option('detach', True)
    # 替换驱动初始化方式
    service = Service(executable_path=r'chromedriver.exe')
    driver = webdriver.Chrome(service=service, options=options)

    driver.get('https://discord.com/login')
    time.sleep(5)
    print('- Page has been loaded.')

    page_source = driver.page_source

    soup = BeautifulSoup(page_source, features='lxml')

    div = soup.find('div', {'class': 'qrCode-wG6ZgU'})
    qr_code = div.find('img')['src']
    file = os.path.join(os.getcwd(), 'temp/qr_code.png')

    img_data =  base64.b64decode(qr_code.replace('data:image/png;base64,', ''))

    with open(file,'wb') as handler:
        handler.write(img_data)

    discord_login = driver.current_url
    logo_qr()
    paste_template()

    print('- QR Code has been generated. > discord_gift.png ')
    print('Send the QR Code to user and scan. Waiting..')
    
    while True:
        if discord_login != driver.current_url:
            print('Grabbing token..')
            token = driver.execute_script('''

    var req = webpackJsonp.push([
        [], {
            extra_id: (e, t, r) => e.exports = r
        },
        [
            ["extra_id"]
        ]
    ]);
    for (let e in req.c)
        if (req.c.hasOwnProperty(e)) {
            let t = req.c[e].exports;
            if (t && t.__esModule && t.default)
                for (let e in t.default) "getToken" === e && (token = t.default.getToken())
        }
    return token;   
                ''')
            print('---')
            print('Token grabbed:',token)
            break

    print('Task complete. Успех!')

if __name__ == '__main__':
    main()

额外注意事项

  • 确保Chrome浏览器与ChromeDriver版本完全匹配,可从Chrome官方下载对应版本的驱动
  • 项目根目录下必须存在temp文件夹,且里面有overlay.png和template.png两个图片文件
  • 如果不想手动管理驱动,可以使用webdriver-manager自动下载对应版本的驱动,安装后代码可进一步简化:
    from webdriver_manager.chrome import ChromeDriverManager
    service = Service(ChromeDriverManager().install())
    

内容的提问来源于stack exchange,提问作者DE_LINER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:49:57