【问题标题】:Why web elements lie in just one element of a list?为什么 web 元素只位于列表的一个元素中?
【发布时间】:2017-12-27 17:20:56
【问题描述】:

我从 Scopus 网站抓取数据并将其保存在名为“s”的列表中。但是所有的数据都保存在s[1]中。我的代码是:

s=[]
document=driver.find_elements_by_xpath("""//*[@id="srchResultsList"]/tbody""")
for i in document:
    s.append(i.text)

我该怎么办?我在 python 2.7 中使用了 selenium 包。

【问题讨论】:

  • 如果您需要获取表数据,您需要遍历tr(行)和td(列)而不是tbody
  • 发布指向该页面的链接,并详细说明您正在寻找什么。给出相关 HTML 的示例,您希望从 HTML 中获得什么,以及您用于获取该 HTML 的代码。

标签: python-2.7 list selenium xpath append


【解决方案1】:

我注意到您正在尝试查询tbody 表标签。这不是原因吗?一般一个table里面只有一个tbody标签,它会产生一个唯一的元素。

您没有告诉我们您是否要返回并将所有 tr 元素或所有 td 元素或什至其中的另一种标签保存在 var 中,但是无论您要返回什么,都需要更改您的选择器。

假设您的 xpath 返回一个 tbody 元素,其中包含大量 IWebElements:tr、td、a、span... 但是 您的选择器只要求 tbody 元素,而不是内部元素,你明白了吗?

如果您想要所有 tr 元素(除标头 tr),请尝试将您的 xpath 更改为 //*[@id="srchResultsList"]/tbody/tr

您还可以使用以下 xpath //*[@id="srchResultsList"]/tbody//td,它将返回您想要的所有 td 元素。

在另一种情况下,如果你想要 tbody 中的所有 tr AND td 元素,你可以这样查询: //*[@id="srchResultsList"]/tbody/tr | //*[@id="srchResultsList"]/tbody//td

您也可以更改或创建子查询以返回您想要的所有元素,但您需要在选择器上指定它:selenium 只接受没有子元素的即时结果

【讨论】:

  • 感谢您的完整回答。你的反应很好。但是在索引列表时有一个错误。我必须有一个包含 200 个 roes 的列表,但是,该列表有 202 行。您对此有何看法?
  • 我只需要明白你想要什么: selenium 内部的返回值是错误的?或者你想取指定数量的元素?
  • 无论如何,你总是可以使用 chrome 控制台窗口来测试你所有的 xpath 和 cssSelectors:尝试使用 $("your-css-selector")$x("your-xpath")。我不知道其他浏览器是否支持 xpath 选择器,因为它是控制台功能,而不是 js 或 jquery。但是chrome肯定支持
猜你喜欢
  • 2021-05-15
  • 2023-01-31
  • 2014-11-28
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多