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

使用Python的Selenium处理Loterie.lu网站Cookie弹窗问题

解决Cookiebot弹窗遮挡元素的Selenium爬取问题

问题背景

爬取站点https://www.loterie.lu/content/portal/fr/playnow/lotto/results.html时,原操作日期选择框的代码:

WebDriverWait(driver, 9).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="queryDateMonth"]'))).click()
WebDriverWait(driver, 9).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="queryDateMonth"]'))).send_keys(month)

因网站新增Cookiebot弹窗,频繁出现元素被遮挡的错误。尝试以下方法均无效:

  • 点击接受Cookie按钮,提示无法滚动到元素(已最大化窗口):
    WebDriverWait(driver, 9).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll"]'))).click()
    
  • 尝试处理alert,确认弹窗并非alert:
    WebDriverWait(driver, 9).until(EC.alert_is_present())
    driver.switch_to.alert.accept()
    
  • 尝试切换到iframe(按索引定位),无效果:
    WebDriverWait(driver, 9).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, '/html/body/iframe[2]')))
    

解决思路

1. 强制滚动+JS点击

跳过Selenium自带的滚动判定,手动用JS将元素滚动到视野内,再触发点击:

cookie_btn = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll")))
# 强制滚动到元素位置
driver.execute_script("arguments[0].scrollIntoView(true);", cookie_btn)
# 用JS直接触发点击
driver.execute_script("arguments[0].click();", cookie_btn)

2. 精准定位Cookiebot的iframe

Cookiebot弹窗可能嵌套在专属iframe中,避免用索引定位,改用特征选择器:

# 等待并切换到Cookiebot的iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[src*='cookiebot']")))
# 点击接受按钮
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.ID, "CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll"))).click()
# 切回主页面
driver.switch_to.default_content()

3. 浏览器层面屏蔽Cookie弹窗(推荐)

通过ChromeOptions配置,直接阻止Cookiebot脚本加载或自动接受Cookie:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 阻止Cookiebot域名加载
chrome_options.add_argument("--block-domain=cookiebot.com")
# 或自动允许所有Cookie
chrome_options.add_experimental_option("prefs", {
    "profile.default_content_setting_values.cookies": 1,
    "profile.cookie_controls_mode": 0
})

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.loterie.lu/content/portal/fr/playnow/lotto/results.html")

4. 延长弹窗等待时间

部分场景下弹窗加载慢于页面,延长等待时长并优先确认元素存在:

# 等待弹窗元素存在
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, "CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll")))
# 直接JS点击
cookie_btn = driver.find_element(By.ID, "CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll")
driver.execute_script("arguments[0].click();", cookie_btn)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:17:31