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

使用Selenium与Python自动化Chrome爬取Transfermarkt时,处理Cookie同意弹窗出现InvalidArgumentException报错求助

使用Selenium与Python自动化Chrome爬取Transfermarkt时,处理Cookie同意弹窗出现InvalidArgumentException报错求助

嘿,我仔细看了你的代码和报错信息,很快就能定位到几个导致问题的小细节,咱们一步步来解决:

第一个问题:find_element的参数格式与定位方式不匹配

你这段处理弹窗的代码存在明显错误:

driver.switch_to.frame(driver.find_element((By.CLASS_NAME,"//div[@class='message-container.cmp-banner']")))
  • 首先,find_element的正确调用方式是find_element(by, value),你错误地把两个参数包裹成了一个元组,这直接触发了'using' must be a string的报错——Selenium期望第一个参数是By枚举的成员(比如By.CLASS_NAME),而不是一个打包的元组。
  • 其次,你写了XPATH格式的字符串,却指定用By.CLASS_NAME定位,这完全不匹配。By.CLASS_NAME只接受单个类名,而message-container.cmp-banner是两个类名的组合,如果你想用类名定位,应该选其中一个(比如message-container),或者改用By.CSS_SELECTOR写.message-container.cmp-banner。

第二个问题:不必要的iframe切换

Transfermarkt的Cookie同意弹窗并不在iframe中,所以你完全不需要执行driver.switch_to.frame(...)这一步。强行切换iframe反而会让后续找同意按钮的操作在错误的页面上下文中执行,大概率会导致找不到元素。

修正后的完整代码

我把处理Cookie弹窗的部分重新调整了,同时建议用更可靠的显式等待代替固定的time.sleep,避免因网络加载慢导致的元素找不到问题:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# Set the location of Chrome driver
path = "C:/Users/jober/webscraper/chromedriver-win32/chromedriver.exe"
s = Service(path)

ChromeOptions = Options()
ChromeOptions.headless = False  # 显示浏览器窗口

# 创建WebDriver实例
driver = webdriver.Chrome(service=s, options=ChromeOptions)
driver.maximize_window()  # 最大化窗口
driver.implicitly_wait(30)

# 访问目标网站
website = 'https://www.transfermarkt.com/'
driver.get(website)

# 处理Cookie弹窗:用显式等待等待按钮可点击,比固定sleep更稳定
wait = WebDriverWait(driver, 15)
consent_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@aria-label='Accept & continue']")))
consent_button.click()

# 保持窗口打开一段时间
time.sleep(60)

# 关闭浏览器
driver.quit()

额外小提示

  • 尽量减少time.sleep的使用,显式等待会根据元素的实际状态动态等待,比固定时长等待更稳定,也不会浪费不必要的时间。
  • 如果后续爬取遇到元素定位问题,可以按下F12打开浏览器开发者工具,直接查看元素的实际属性和位置,避免定位方式选错。

备注:内容来源于stack exchange,提问作者JobertGutierrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:33:05