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

如何使用Selenium Python定位特定<li>元素获取目标数据流?

Python Selenium 精准抓取奇数行JSON数据问题

问题说明

正在学习Python版Selenium,此前已成功从实时数据流抓取JSON数据,但处理另一台格式不同的设备时遇到定位难题:网页中ul#stream下的<li>元素均带有row类,但每隔一行是无关数据,需要精准抓取第1、3、5行这类奇数行的目标数据,现有代码仅能随机获取单个row元素,无法实现精准筛选。

现有运行代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://server.domain/")
# 输入编号并提交
element = driver.find_element(By.ID, "message")
element.send_keys(box_num)
element_send = driver.find_element(By.ID, "send")
element_send.send_keys('\ue007')
# 暂停数据流
time.sleep(1)
element_pause = driver.find_element(By.ID, "pause")
element_pause.send_keys('\ue007')
# 尝试抓取数据(仅能获取单个row元素)
element_data = driver.find_element(By.CLASS_NAME, "row")
data = element_data.text

尝试的XPATH(存在局限)

原XPATH仅能匹配第一个li.row元素,无法筛选奇数行:

first_li = driver.find_element(By.XPATH, "//ul[@id='stream']/li[@class='row']")
first_lit = first_li.text

解决方案:用XPATH筛选奇数行

利用XPATH的位置筛选语法,直接定位所有奇数行的li.row元素:

方法1:使用position()函数

# 获取所有奇数行的row元素
odd_rows = driver.find_elements(By.XPATH, "//ul[@id='stream']/li[@class='row'][position() mod 2 = 1]")
# 遍历提取每行文本
for row in odd_rows:
    target_data = row.text
    # 后续处理JSON数据

方法2:使用odd()简写

# 更简洁的写法,直接匹配奇数位置的元素
odd_rows = driver.find_elements(By.XPATH, "//ul[@id='stream']/li[@class='row'][odd()]")

关键说明

  • 使用find_elements(复数形式)而非find_element,才能获取所有符合条件的元素;
  • XPATH中的position()从1开始计数,mod 2 =1或odd()均可筛选出第1、3、5...行的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:05:25