【问题标题】:Is there any way to select element through HTML, by selenium, python有没有办法通过 HTML、selenium、python 选择元素
【发布时间】:2020-04-05 05:27:25
【问题描述】:

我正在通过 selenium、python 制作爬行应用程序,但我被卡住了。

enter image description here

如图所示,我可以选择文本(带下划线)。 但我需要的是文本旁边的数字。

但在 chrome 中按 F12

enter image description here

numbers(red cricle) 有类名,但类名都是一样的。 没有指标可以用来通过 selenium 选择数字。(据我所知)

所以我试图找到通过硒通过 HTML 选择元素的任何方法。 但我找不到。有什么办法吗?

如果我要找的东西不存在,我很抱歉。 我只知道 python 和 selenium.. 所以如果我不能处理这个,请告诉我。

---编辑

我认为我的解释很糟糕。 我需要的是首先找到文本,而不是收集数字(两个)。 但有大量的文字。我只是截图一点点。 所以我可以通过它的特定ID(很多)来定位文本。 但我怎样才能得到嵌套到文本的数字。 这是我的问题。抱歉解释不好

如果 BeautifulSoup 可以处理这个问题,请告诉我。感谢您的帮助。


特别感谢克里斯汀

她的代码解决了我的问题。

【问题讨论】:

  • 有必要使用 selenium 吗? ..可以是BeautifulSoup吗?
  • 获取所有元素,然后使用索引 - 即。 all_items[2]

标签: python selenium


【解决方案1】:

您可以使用 XPath 索引来完成选择第一个 td 元素。给定屏幕截图,您可以选择第一个包含2,.167td

cell = driver.find_element_by_xpath("//tr[td/a[text()='TEXT']]/td[@class='txt-r'][1]")
print(cell.text)

您应该将TEXT 替换为您在屏幕截图中带下划线的字符——我没有这个键盘,所以我无法为您输入文本。

上面的 XPath 将查询所有表格行,选择包含所需文本的行,然后在一行内查询具有 txt-r 类的表格单元格。因为这两个td 元素都有txt-r 类,所以您只想选择其中一个,使用[1] 指示的索引。 [1] 将选择第一个 td,文本为 2,167

用户要求的完整样本:

# first get all text on the page
all_text_elements = driver.find_elements_by_xpath("//a[contains(@class, 'link-resource')]")

# iterate text elements and print both numbers that are next to text
for text_element in all_text_elements:

    # get the text from web element
    text = text_element.text

    # find the first number next to it (2,167 from sample HTML)
    first_number = driver.find_element_by_xpath("//tr[td/a[text()='" + text + "']]/td[@class='txt-r'][1]")
    print(first_number.text)

    # find 2nd number (0 from sample HTML)
    second_number = driver.find_element_by_xpath("//tr[td/a[text()='" + text + "']]/td[@class='txt-r'][2]")
    print(second_number.text)

【讨论】:

  • 对于 all rows 的情况,您可能希望将 cells = driver.find_element 替换为 cells = driver.find_elements
  • 正确 :) 我在粘贴上一个示例中的行时错过了额外的 find_elements
  • 我认为我的解释很糟糕。我需要的是首先找到文本,而不是收集数字(两个)。但是有大量的文字。我只是截图一点点。所以我可以通过它的特定ID(很多)来定位文本。但我怎样才能得到文本旁边的数字。这是我的问题。抱歉解释不好
  • @Shineuichul 根据新信息更新了我的答案。
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
相关资源
最近更新 更多