使用Selenium处理瑞安航空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
相关产品推荐
相关产品推荐

