[英]Why is my Selenium xpath expression returning an [object attribute] instead of an element?
我正在制作一个可以浏览我的网页并抓取所有链接的抓取工具。 许多链接都在封闭列表中,也称为树。 因此,我找到了包含所有链接的 xpath。 我在谷歌检查中运行了以下 xpath,它运行得非常好,给出了以下输出。
var result=$x("//div[@id='index__tree']//a[contains(text(),doku.php)]/@href")
result[0].value
"/doku.php?ihome"
result[4].value
"/doku.php?start"
我然后将 xpath 转换为 selenium 代码:
a = driver.find_elements_by_xpath("//div[@id='index__tree']//a[contains(text(),doku.php)]/@href")
for aa in a:
print(aa)
然后我运行代码并收到以下错误:
opening browser
Login Successful
Traceback (most recent call last):
File "wiki.py", line 49, in <module>
a = driver.find_elements_by_xpath("//div[@id='index__tree']//a[contains(text(),doku.php)]/@href")
File "/home/aevans/wikiProject/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 410, in find_elements_by_xpath
return self.find_elements(by=By.XPATH, value=xpath)
File "/home/aevans/wikiProject/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 1007, in find_elements
'value': value})['value'] or []
File "/home/aevans/wikiProject/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/aevans/wikiProject/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: The result of the xpath expression "//div[@id='index__tree']//a[contains(text(),doku.php)]/@href" is: [object Attr]. It should be an element.
(Session info: headless chrome=73.0.3683.86)
(Driver info: chromedriver=73.0.3683.86,platform=Linux 3.10.0-957.12.2.el7.x86_64 x86_64)
尝试更换
a = driver.find_elements_by_xpath("//div[@id='index__tree']//a[contains(text(),doku.php)]/@href")
for aa in a:
print(aa)
和
a = [elem.get_attribute("href") for elem in driver.find_elements_by_xpath("//div[@id='index__tree']//a[contains(text(),doku.php)]")]
for aa in a:
print(aa)
请注意,我从选择器的末尾删除了“/@href”。
Selenium 选择器必须返回一个 WebElement。 通过指定“/@href”,它返回该元素的 href 属性而不是元素本身。
get_attribute(attribute_name) 方法返回元素的属性。 然后,您可以循环遍历它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.