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

Python 无效选择器错误:使用xpath和Selenium从多个跨距中拖出不同类型的文本,python,selenium,xpath,Python,Selenium,Xpath,我正试图用逗号分隔的作者列表,并用星号表示,格式如下[重要]: 倒数第一,倒数第一,倒数第一*,倒数第一 我正在抓取的html部分非常复杂,但是我已经成功地测试了一个xpath,它可以生成我想要的文本和符号 //span[@class="hlFld-ContribAuthor"]/span[@class="hlFld-ContribAuthor"]/a/text() | //span[@class="NLM_x"]/x/text() | //a[@class="ref"]/sup/text()

我正试图用逗号分隔的作者列表,并用星号表示,格式如下[重要]:

倒数第一,倒数第一,倒数第一*,倒数第一

我正在抓取的html部分非常复杂,但是我已经成功地测试了一个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)
错误:

InvalidSelectorException:消息:给定的选择器 //span[@class=“hlFld contribautor”]/span[@class=“hlFld contribautor”]/a/text() |//span[@class=“NLM_x”]/x/text()|///a[@class=“ref”]/sup/text()是 无效或未生成WebElement。下面的错误 发生:InvalidSelectorError:xpath表达式的结果 “//span[@class=“hlFld contribautor”]/span[@class=“hlFld contribautor”]/a/text() |//span[@class=“NLM_x”]/x/text()|///a[@class=“ref”]/sup/text()”是: [对象文本]。它应该是一个元素

如何让selenium以正确的顺序获取所需的正确文本和符号?如果没有新行,我无法打印xpath的结果


编辑:通过从xpath中删除函数
驱动程序中的/text()解决了xpath错误。按xpath查找元素(my_xpath)
希望在找到由
my_xpath
标识的节点时找到DOM元素。如果没有,它将抛出一个错误。XPath表达式都返回文本节点,因此会导致错误

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

“//span[@class=\“hlFld contribautor\”]/span[@class=\“hlFld contribautor\”]/a |//span[@class=\“NLM\u x\”]/x |//a[@class=\“ref\”]/sup

此外,由于要返回多个元素,因此应该使用
driver.find\u elements\u by\u xpath
(注意复数)而不是
driver.find\u element\u by\u xpath

然后,通过在
authors
上循环,您将能够从每个author元素中获取所需的文本:

for author in authors:
    print(author.text)

非常感谢。这对我来说是可行的,只是我的结果中有太多的逗号(我正在抓取的实际html比我用来将文本转换为xpath的代码要大)。我想这一定是因为我的一个XPath的范围不够窄(ref)。我的结果打印在单独的行上,而不是作为一个句子。是否有办法解决此问题。若要在同一行上打印输出,请尝试类似以下操作:
print('''.join([author.text for authors in authors])
author.text是否删除空格?我认为我的xpath结果包括逗号“,”后的空格,但是这个print函数不保留空格。谢谢如果我打印(“”.join([author.text.encode('utf-8'),用于authors中的author]),我会得到这个结果First-Last、First-Last和First-Last。