Python中Selenium Driver加载目标页面错误问题
Selenium加载Oddsportal链接丢失锚点
/#cs;2的问题解决 问题说明
- 爬取足球联赛赔率时,生成的目标链接为
https://www.oddsportal.com/football/germany/bundesliga/dortmund-heidenheim-zsmd0ggn/#cs;2,但调用Selenium的driver.get()后,页面实际丢失末尾的/#cs;2锚点部分 - 直接在浏览器访问该链接可正常加载,重复执行
driver.get()偶尔能加载正确页面,Chrome、Firefox驱动均存在此问题 - 页面正确性验证:正确页面执行
soup.find_all("p", {"data-v-962b58dc" : True})返回长标签列表,错误页面返回空列表
解决思路与方案
1. 显式等待确保动态内容加载
锚点对应的赔率内容通常是动态渲染的,需等待目标元素出现后再解析页面:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import time # 生成game_url后执行以下代码 driver.get(game_url) try: # 等待目标p标签加载,超时设为10秒 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'p[data-v-962b58dc]')) ) except TimeoutException: # 超时后重新加载一次 driver.get(game_url) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'p[data-v-962b58dc]')) ) # 解析页面 soup = BeautifulSoup(driver.page_source, 'html.parser') print(soup.find_all("p", {"data-v-962b58dc" : True}))
2. 通过JavaScript强制加载完整锚点链接
绕过Selenium的URL解析限制,直接用JS跳转至带锚点的目标页面:
# 替换原driver.get(game_url)为以下代码 driver.execute_script(f"window.location.href = '{game_url}';") # 等待目标元素加载 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'p[data-v-962b58dc]')) )
3. 校验页面URL,不匹配则重新加载
添加URL检查逻辑,确保锚点存在后再解析:
driver.get(game_url) # 循环检查当前URL是否包含目标锚点 while '#cs;2' not in driver.current_url: driver.get(game_url) time.sleep(1) # 短暂等待页面跳转 # 等待元素加载后解析 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'p[data-v-962b58dc]')) ) soup = BeautifulSoup(driver.page_source, 'html.parser')
4. 禁用浏览器重定向(可选)
部分浏览器驱动可配置禁用重定向,避免锚点被截断:
from selenium.webdriver.chrome.options import Options chrome_options = Options() # 禁用重定向(部分Chrome版本支持) chrome_options.add_argument("--disable-redirects") driver = webdriver.Chrome(options=chrome_options)
内容的提问来源于stack exchange,提问作者Sinusx
相关产品推荐
相关产品推荐

