You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:34:52