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

使用Selenium处理瑞安航空Cookie弹窗:无法找到正确按钮类

瑞安航空Cookie弹窗点击问题解决

我是Selenium自学新手,目前尝试从瑞安航空(Ryanair)意大利站点获取航班数据,但遇到Cookie弹窗后无法继续操作。我想要点击弹窗中显示为意大利语“Fatto”的黄色“Done”按钮,但推测是没有选择正确的元素定位方式。我尝试了以下两段代码,均出现相同错误:

第一段尝试代码

from selenium.webdriver import Chrome
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import  Service
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_driver = ChromeDriverManager().install()
driver = Chrome(service=Service(chrome_driver))
driver.maximize_window()
link= "https://www.ryanair.com/it/it"
driver.get(link)
sleep(3)
cookies  = driver.find_element(By.CLASS_NAME,'cookie-popup-with-overlay__button-settings').click()
sleep(3)
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CLASS_NAME,'cookies-details__done-button ry-button--gradient-yellow ng-star-inserted'))).click()

第二段尝试代码

from selenium.webdriver import Chrome
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import  Service
from selenium.webdriver.common.by import By
from time import sleep
chrome_driver = ChromeDriverManager().install()
driver = Chrome(service=Service(chrome_driver))
driver.maximize_window()
link= "https://www.ryanair.com/it/it"
driver.get(link)
cookies  = driver.find_element(By.CLASS_NAME,'cookie-popup-with-overlay__button-settings').click()
sleep(10)
driver.find_element(BY.CLASS_NAME,'cookies-details__allow-all-button ry-button--gradient-blue ng-star-inserted').click

问题分析

核心问题在于使用By.CLASS_NAME时传入了多个空格分隔的类名,但Selenium的CLASS_NAME定位器仅支持单个类名,多类名传入会直接导致定位失败。此外第二段代码还有两处小错误:

  • BY应为By(大小写拼写错误)
  • click后缺少括号,正确写法是.click()

正确解决方案

改用CSS_SELECTOR定位多类名元素,同时用显式等待替代固定sleep提升稳定性:

from selenium.webdriver import Chrome
from webdriver_manager.chrome import ChromeDriverManager
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

# 初始化浏览器
chrome_driver = ChromeDriverManager().install()
driver = Chrome(service=Service(chrome_driver))
driver.maximize_window()

# 打开瑞安航空意大利站
driver.get("https://www.ryanair.com/it/it")

# 等待并点击Cookie设置按钮
wait = WebDriverWait(driver, 10)
settings_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button.cookie-popup-with-overlay__button-settings')))
settings_btn.click()

# 等待并点击黄色的"Fatto"按钮
done_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button.cookies-details__done-button.ry-button--gradient-yellow')))
done_btn.click()

补充说明

  • CSS选择器中多类名用.连接,比如button.cookies-details__done-button.ry-button--gradient-yellow表示匹配同时拥有这两个类的button元素
  • 显式等待会在元素可点击时立即执行操作,比固定sleep更高效且适配页面动态加载
  • 若页面加载较慢,可适当调整等待时长(比如把10改为15)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:36