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

Python使用Selenium爬取Hxro站点动态下拉ticker列表问题求助

问题解决思路

核心原因

  • 页面Ajax动态加载未完成就执行了元素查找,仅能拿到已经渲染的默认选中ticker
  • 下拉菜单默认处于收起状态,其余ticker对应的DOM节点未挂载到页面上,自然匹配不到
优化后可用代码

补充引入Selenium显式等待相关模块,先模拟点击展开下拉框,再等待所有元素加载完成后提取:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = "https://live.hxro.io/tixwix"
chrome_options = Options()
# 调试阶段可以注释掉下方无头模式配置,直观看到操作过程
# chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(executable_path = r'C:\geckodriver\chromedriver.exe',options = chrome_options)
driver.get(url)
# 设置最长等待时间为10秒,元素加载完成就立刻执行后续操作,无额外等待耗时
wait = WebDriverWait(driver, 10)

try:
    # 1. 等待下拉触发按钮可点击,模拟点击展开下拉菜单
    toggle_btn = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'lastprice-toggle')))
    toggle_btn.click()
    
    # 2. 等待所有下拉项加载完成,这里的CSS选择器可根据实际DOM调整:
    # 浏览器F12展开下拉框后,用元素选择工具点选任意ticker项,复制通用选择器替换即可
    # 下方为通用示例,适配大多数下拉框选项的role属性匹配规则
    all_tickers = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.lastprice-dropdown [role="option"]')))
    
    # 提取所有非空的ticker文本
    ticker_result = [item.text.strip() for item in all_tickers if item.text.strip()]
    print(ticker_result)
finally:
    driver.quit()
补充说明
  • 若无头模式下运行失败,可以添加chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')模拟正常浏览器标识,避免被网站反爬拦截。
  • 显式等待比强制sleep效率更高,也能避免网络波动导致的偶发加载失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 07:45:01