当前位置: 首页 > 知识库问答 >
问题:

无效的选择器错误:使用xpath和Selenium从多个跨中Webscraping不同类型的文本

微生智刚
2023-03-14

我正试图以以下格式刮出一个逗号分隔的作者列表[重要]:

第一个最后,第一个最后,第一个最后*,第一个最后

我正在讨论的html部分非常复杂,但是我已经成功地测试了一个xpath,该xpath生成了我想要的文本和符号。

//span[@class="hlFld-ContribAuthor"]/span[@class="hlFld-ContribAuthor"]/a/text() | //span[@class="NLM_x"]/x/text() | //a[@class="ref"]/sup/text()

但是,当我在python代码中使用该公式时,我会得到一个错误。

# get authors
xpath = "//span[@class=\"hlFld-ContribAuthor\"]/span[@class=\"hlFld-ContribAuthor\"]/a/text() | //span[@class=\"NLM_x\"]/x/text() | //a[@class=\"ref\"]/sup/text()"
authors = driver.find_element_by_xpath(xpath)
print str(authors)

共有1个答案

谭建章
2023-03-14

函数driver.find_element_by_xpath(my_xpath)期望在定位由my_xpath标识的节点时查找DOM元素。如果没有,则抛出错误。您的XPath表达式都返回文本节点,因此会导致错误。

要返回DOM元素,请将XPath表达式改为:

“//span[@class=\hlfld-contribauthor\”]/span[@class=\hlfld-contribauthor\“]/a//span[@class=\nlm_x\”]/x//a[@class=\ref\“]/sup

然后,可以通过在authors上循环,从每个author元素获取所需的文本:

for author in authors:
    print(author.text)
 类似资料:
  • 我正在尝试通过webWhatsapp从聊天中打印我的一条消息。 我可以通过控制台选项卡中的Javascript来做到这一点,我这样做了 问题是,我试图在python上做同样的事情,但它对我不起作用… 以下是我的尝试: 我得到的错误是:消息:无效选择器:不允许复合类名 我对javascript有点陌生,很抱歉理解有误,谢谢你的帮助!:)

  • 问题内容: 我正在尝试通过webWhatsapp从聊天中打印我的消息之一。 我可以通过“控制台”选项卡中的Javascript完成此操作 问题是我试图在python上做同样的事情,但对我不起作用。 这是我尝试过的: 我收到的错误是:消息:无效的选择器:不允许使用复合类名 我对javascript有点陌生,所以很抱歉造成误会,并感谢您的帮助!:) 问题答案: 根据 实施文档: 所以, 使用您将无法传

  • 我知道关于xpath有成千上万个简单的问题,但我不知道如何组合两个不太简单的表达式。。。 我的xml结构: 按类别选择 我知道通过在类后搜索可以选择div: 按文本选择 要选择我知道的span,我只需添加span,然后我想通过文本进行选择。对于该用例,我得到了xpath(这里的表单): 这些选择器都正常工作,但我想将它们结合起来 搜索类别“btn” 我试图这样想,但那不起作用测试示例: 即使有效,

  • 简而言之,我试图实现一个MultiSelectListbox,在那里我可以选择多个选项和给定类别的所有子选项。 我想在使用动态素描DataTables(组和类别),我在组表上选择时重新加载类别表,以显示正确的子选项与ajax复选框,以便bean接收所有选定的选项。 然而,一定有比这更简单更好的方法。唯一的条件是我可以选择一个组或整个组的多个类别,这意味着该组的所有类别。 编辑:我的一个朋友给了我一

  • 这个应用程序的每个JVM应该使用相同的数据库吗?否则跟踪令牌不会在同一个应用程序中“共享”? 如何在运行传奇的相同应用程序中拆分事件?一个saga类型或saga实例是否总是在同一个应用程序上处理(直到它被关闭,所以另一个实例负责它)? 还是每个JVM都接收事件,并且每个相同类型的传奇都将运行?(并导致发送重复命令和错误) 等。还有很多问题。