python-3.x 使用Selenium选择特定的< li>< /li>数据流

qzwqbdag  于 2023-05-19  发布在  Python
关注(0)|答案(1)|浏览(260)

我只是在用Python学习Selenium的来龙去脉,所以如果它不正确,请原谅我的问题。
Inspect Element Pic
我已经成功地从真实的数据流中提取了JSON数据。在使用另一个数据流略有不同的设备时,我不知道如何选择要抓取的特定id/class。
屏幕抓图显示网页的布局。这是我的代码,工作正常,但在这个特定的示例中,每第二个“行”不是我想要的数据。它是独立的json数据,与我需要的其他“行”的数据不同。在这种情况下,我如何定位第一行、第三行或第五行?
在尝试使用这个特定设备时,代码似乎会随机抓取其中一行,有时会抓取正确的行,有时则不会。由于这些都被称为“行”,我不确定如何针对特定的一个。
下面是我的代码中获取数据的部分:

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')
    # element_class = driver.find_element(By.ID, "stream")
    element_data = driver.find_element(By.CLASS_NAME, "row")
    data = element_data.text

虽然下面的代码似乎可以工作,但我不认为它是总是工作的正确语法。我对XPATH语法有点困惑,所以我只是随便玩玩

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

ymdaylpp1#

下面是我的意思(请注意,find_elements()实际上会返回一个WebElement的列表):

li_elements = driver.find_elements(By.XPATH,"//ul[@id='stream']/li[@class='row']")

你就能进入第一第三第五... list slicing:

li_elements[::2]

doc to find_elements()函数:https://selenium-python.readthedocs.io/locating-elements.html

相关问题