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类来管理浏览器驱动路径。
修复步骤
- 确保安装最新版Selenium:
pip install --upgrade selenium
- 修改代码中驱动初始化部分,导入
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
相关产品推荐
相关产品推荐

