Python 无效选择器错误:使用xpath和Selenium从多个跨距中拖出不同类型的文本
我正试图用逗号分隔的作者列表,并用星号表示,格式如下[重要]: 倒数第一,倒数第一,倒数第一*,倒数第一 我正在抓取的html部分非常复杂,但是我已经成功地测试了一个xpath,它可以生成我想要的文本和符号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()
//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。