Selenium无法获取更新的AJAX内容,英超特定页面表格爬取异常
这个问题我碰到过好多次——英超官网的动态内容加载经常因为Cookie弹窗、异步渲染的原因,导致你带的筛选参数(赛季se=42、俱乐部cl=2)没生效,最后抓了默认的全赛季全俱乐部数据。给你几个关键的解决步骤和修正后的代码:
解决思路与修正代码
1. 先处理隐私政策弹窗
英超官网会强制弹出Cookie同意框,如果不处理,页面的筛选逻辑可能被阻塞,参数自然不会生效。你需要先定位并点击同意按钮。
2. 显式等待动态表格加载
表格是通过JavaScript异步渲染的,直接获取元素会拿到初始的默认表格。用WebDriverWait等待目标表格的条目加载完成后再抓取,才能拿到筛选后的内容。
3. 验证当前页面URL
有时候网站可能因为缓存或跳转丢失参数,先确认浏览器加载的URL是否和你传入的一致,避免白忙活。
修正后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化Chrome浏览器(记得配置好ChromeDriver路径) driver = webdriver.Chrome() target_url = "https://www.premierleague.com/stats/top/players/red_card?se=42&cl=2" driver.get(target_url) try: # 处理Cookie同意弹窗(按钮文本可能随官网更新调整,需用开发者工具确认) accept_cookie_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept All Cookies')]")) ) accept_cookie_btn.click() # 确认URL参数没有丢失,避免重定向导致筛选失效 assert driver.current_url == target_url, "URL参数丢失,页面可能发生了重定向" # 等待筛选后的表格条目加载完成(定位tbody下的行元素) table_rows = WebDriverWait(driver, 15).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table.statsTable tbody tr")) ) # 遍历抓取你需要的表格数据(选择器需根据实际DOM结构调整) for row in table_rows: player_name = row.find_element(By.CSS_SELECTOR, "td.playerName a").text red_card_count = row.find_element(By.CSS_SELECTOR, "td.mainStat").text print(f"球员: {player_name}, 红牌数: {red_card_count}") finally: # 无论成功失败,最后关闭浏览器 driver.quit()
额外注意事项
- 如果Cookie按钮的定位器失效,打开Chrome开发者工具重新确认按钮的XPATH或CSS选择器;
- 如果还是无法获取正确数据,可在处理Cookie后添加
driver.refresh(),强制页面重新加载带参数的内容; - 若遇到网站检测Selenium的情况,可添加反检测配置:
options = webdriver.ChromeOptions() options.add_argument("--headless=new") # 无头模式可选 options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=options)
内容的提问来源于stack exchange,提问作者user2497484
相关产品推荐
相关产品推荐

