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

如何用Selenium实现动态加载马拉松结果页面的导航与URL获取

解决方案

问题1:选中「Marathon Men」后点击搜索按钮跳转页面B

你已经成功选中下拉选项,接下来只需定位并点击搜索按钮即可。为避免页面加载延迟导致元素找不到,建议用等待机制确保按钮可点击后再执行操作。修改后的代码如下:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.marathon.tokyo/2023/result/index.php'

driver = webdriver.Chrome()
driver.get(url)

# 选中Marathon Men选项
options = driver.find_elements(By.TAG_NAME, "option")
for option in options:
    if 'Marathon Men' in option.text:
        option.click()
        break

# 等待搜索按钮加载完成并点击(可根据页面实际元素属性调整定位方式)
search_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//input[@type="submit" or @value="Search"]'))
)
search_btn.click()

补充说明:

如果搜索按钮有明确的id或class属性,比如id="search-btn",可以直接用By.ID, "search-btn"定位,比XPATH更高效。


问题2:处理页面B中的JavaScript链接(跳转页面C及分页)

页面B的链接分两类:分页用的javascript:page(n);,以及选手详情用的javascript:detail(xxx);。无需解析JS代码,直接点击对应元素即可触发跳转:

1. 跳转至选手详情页(页面C)

# 等待页面B加载完成,定位所有选手姓名的详情链接(需根据页面实际HTML结构调整XPATH)
detail_links = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, '//table//tr//td[2]/a'))
)

# 遍历点击每个详情链接,爬取页面C数据
for link in detail_links:
    link.click()  # 直接触发JS跳转
    # 此处执行你已有的页面C数据爬取逻辑
    # ...
    # 爬取完成后返回页面B
    driver.back()

2. 处理分页(获取更多选手数据)

如果需要翻页,有两种方式实现:

# 方法1:直接执行JS代码跳转到指定页
driver.execute_script("page(2);")  # 跳转到第2页

# 方法2:定位分页链接元素并点击
page_links = driver.find_elements(By.XPATH, '//a[contains(@href, "javascript:page")]')
for page_link in page_links:
    if 'page(2)' in page_link.get_attribute("href"):
        page_link.click()
        break

补充说明:

选手详情链接的XPATH需要根据页面B的实际结构调整,比如查看页面源码中选手姓名所在的表格单元格位置,替换示例中的//table//tr//td[2]/a。


内容的提问来源于stack exchange,提问作者Physicist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:23:09