使用Selenium和Python自动化时AirCanada页面加载失败求助
加拿大航空页面Selenium加载卡住的解决办法
核心原因:网站反爬机制识别自动化工具
加拿大航空的页面会检测浏览器的自动化特征(比如Selenium默认的标识),直接用默认配置的ChromeDriver会被拦截,导致页面加载停滞。以下是针对性的解决步骤:
1. 配置ChromeOptions隐藏自动化痕迹
修改代码,添加配置模拟真实浏览器环境:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import os import time SAMPLE_URL = "https://www.aircanada.com/aeroplan/redeem/availability/outbound?org0=YTO&dest0=LGA&departureDate0=2023-11-01&lang=en-CA&tripType=O&ADT=1&YTH=0&CHD=0&INF=0&INS=0&marketCode=TNB" os.environ['PATH'] += r";C:/SeleniumDrivers/chromedriver-win64/" # 配置Chrome选项 chrome_options = Options() # 禁用自动化检测特征 chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 添加真实User-Agent(可从你自己的浏览器复制) chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 最大化窗口模拟真实操作 chrome_options.add_argument("--start-maximized") # 禁用沙箱模式(部分环境需要) chrome_options.add_argument("--no-sandbox") driver = webdriver.Chrome(options=chrome_options) # 移除navigator.webdriver标识 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") driver.get(SAMPLE_URL) # 用显式等待替代固定sleep(更可靠) from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: # 等待页面核心元素加载(可根据实际调整元素定位) WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.TAG_NAME, "body")) ) finally: time.sleep(5) driver.quit()
2. 处理Cookie授权弹窗
页面加载后若出现Cookie同意弹窗,需先点击同意,否则页面可能无法继续加载。在driver.get(SAMPLE_URL)后添加:
try: # 定位并点击Cookie同意按钮(需根据页面实际元素调整选择器) accept_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler")) ) accept_btn.click() except: # 无弹窗则跳过 pass
3. 控制请求频率
短时间内频繁请求会触发反爬限制,建议每次请求后添加合理等待时间,避免连续刷新页面。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

