如何用Selenium WebDriver在Kayak航班搜索中点击「Accept All」Cookie按钮
原代码核心问题
你的CSS选择器写法存在错误:
button#RxNS中#是ID定位语法,但RxNS是class属性,应改为.- 多个class之间需用
.连接(空格是后代选择器语法,会导致定位逻辑错误) - 无需指定全部class,冗余且易因页面更新失效
可行解决方案
方案1:通过按钮文本精准定位(最可靠)
直接基于「Accept all」文本定位按钮,摆脱对易变class的依赖:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待按钮可点击并执行点击 WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, "//button[.//div[text()='Accept all']]")) ).click()
方案2:简化CSS选择器
保留关键class或直接定位目标文本容器:
# 方式1:通过核心class定位按钮 WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button.RxNS-mod-stretch")) ).click() # 方式2:定位按钮下的文本容器 WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button .RxNS-button-content")) ).click()
方案3:提前注入Cookie跳过弹窗
若不想处理弹窗,可提前设置Kayak的授权Cookie:
chrome_options = Options() # 添加禁用通知/ Cookie提示的参数 chrome_options.add_argument("--disable-notifications") chrome_options.add_argument("--disable-cookie-errors") driver = webdriver.Chrome(options=chrome_options) # 先打开Kayak主页,注入授权Cookie(需抓包获取有效Cookie键值对) driver.get("https://www.kayak.co.uk") driver.add_cookie({ "name": "consent", "value": "true", "domain": ".kayak.co.uk" }) driver.get(url)
额外注意事项
- 检查弹窗是否在
iframe中:若上述方法无效,需先切换到对应iframe再定位元素 - 避免隐式等待与显式等待混用:同时使用
implicitly_wait和WebDriverWait会导致等待逻辑混乱,建议仅保留显式等待 - 确认ChromeDriver版本:需与本地Chrome浏览器版本一致,版本不兼容会引发元素定位失败
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

