python selenium xpath 错误 [object XrayWrapper [object Attr]]
python selenium xpath error [object XrayWrapper [object Attr]]
我正在编写一个脚本,用于从基于拍卖的服务中收集所有拍卖。
我想通过一直出现错误来获取所有带有 selenium xpath 的模板。我已经设法使用 xpath 从页面下载拍卖说明,但我无法提取它们的 href。
我同时使用 xpath finder(用于 firefox)和 xpath helper(用于 chrome),它显示我的 links。但我不能敬畏他们。
下面我将展示我的脚本、我的控制台日志和我想要提取的 link。
SCRIPT (part of it)
while next_page_available:
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "//li[contains(@class, 'nav-btn next-site')]")))
element = driver.find_element_by_xpath("//li[contains(@class, 'nav-btn next-site')]")
if element.is_displayed():
#THIS IS THE PART WHERE IT CRASHES
links = driver.find_elements_by_xpath('//tbody/tr/td[3]/a[1]/@href')
print "LINK: ", links
for link in links:
value = link.get_attribute("content")
items_names.append(value)
count += 1
print "hi"
print count, " val: ", value
element.click()
else:
print "No more pages with auctions"
next_page_available = False
控制台日志:
#########My console log:
InvalidSelectorError: The result of the xpath expression '//tbody/tr/td[3]/a[1]/@href' is: [object XrayWrapper [object Attr]]. It should be an element.
我想参加的拍卖 link:
<a href="http://ms.allegro.pl/template/edit/563656/" title="Buty robocze, WODOODPORNE TW400 Panoply roz.43" class=" xh-highlight">Buty robocze, WODOODPORNE TW400 Panoply roz.43</a>
感谢您的帮助,
祝福
您正在使用这个 XPath 表达式:
//tbody/tr/td[3]/a[1]/@href
这是一个 return 一系列 属性 的表达式。就 XPath 而言,这完全没问题。但是,当您通过 Selenium 使用 XPath 时,对于 XPath 表达式可以 return 有一个限制:与 find_element(s)...
方法一起使用的 XPath 表达式必须 return 元素,并且没有else. 如果你删除 @href
,你会得到一个元素。如果您想要的是那些具有 href
属性的元素,您可以将 a[1]
替换为 a[position() = 1 and @href]
.
解决方案:
我找到了一份文档,我可以提取一个属性。
您所要做的就是从您请求的项目的 body 中取出一个属性。
在我的特殊情况下,我正在寻找 href(下面的示例)。
如果您正在寻找 link 的标题,只需键入 get_attribute("type")
一切都会 运行 顺利进行。
links = driver.find_elements_by_xpath("//a[contains(@href,'http://ms.allegro.pl/template/edit/')]")
for link in links:
value = link.get_attribute("href")
感谢您的回复。
祝福
我正在编写一个脚本,用于从基于拍卖的服务中收集所有拍卖。 我想通过一直出现错误来获取所有带有 selenium xpath 的模板。我已经设法使用 xpath 从页面下载拍卖说明,但我无法提取它们的 href。 我同时使用 xpath finder(用于 firefox)和 xpath helper(用于 chrome),它显示我的 links。但我不能敬畏他们。
下面我将展示我的脚本、我的控制台日志和我想要提取的 link。
SCRIPT (part of it)
while next_page_available:
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "//li[contains(@class, 'nav-btn next-site')]")))
element = driver.find_element_by_xpath("//li[contains(@class, 'nav-btn next-site')]")
if element.is_displayed():
#THIS IS THE PART WHERE IT CRASHES
links = driver.find_elements_by_xpath('//tbody/tr/td[3]/a[1]/@href')
print "LINK: ", links
for link in links:
value = link.get_attribute("content")
items_names.append(value)
count += 1
print "hi"
print count, " val: ", value
element.click()
else:
print "No more pages with auctions"
next_page_available = False
控制台日志:
#########My console log:
InvalidSelectorError: The result of the xpath expression '//tbody/tr/td[3]/a[1]/@href' is: [object XrayWrapper [object Attr]]. It should be an element.
我想参加的拍卖 link:
<a href="http://ms.allegro.pl/template/edit/563656/" title="Buty robocze, WODOODPORNE TW400 Panoply roz.43" class=" xh-highlight">Buty robocze, WODOODPORNE TW400 Panoply roz.43</a>
感谢您的帮助, 祝福
您正在使用这个 XPath 表达式:
//tbody/tr/td[3]/a[1]/@href
这是一个 return 一系列 属性 的表达式。就 XPath 而言,这完全没问题。但是,当您通过 Selenium 使用 XPath 时,对于 XPath 表达式可以 return 有一个限制:与 find_element(s)...
方法一起使用的 XPath 表达式必须 return 元素,并且没有else. 如果你删除 @href
,你会得到一个元素。如果您想要的是那些具有 href
属性的元素,您可以将 a[1]
替换为 a[position() = 1 and @href]
.
解决方案:
我找到了一份文档,我可以提取一个属性。
您所要做的就是从您请求的项目的 body 中取出一个属性。
在我的特殊情况下,我正在寻找 href(下面的示例)。
如果您正在寻找 link 的标题,只需键入 get_attribute("type")
一切都会 运行 顺利进行。
links = driver.find_elements_by_xpath("//a[contains(@href,'http://ms.allegro.pl/template/edit/')]")
for link in links:
value = link.get_attribute("href")
感谢您的回复。 祝福