我正在编写一个脚本,用于收集基于拍卖的服务的所有拍卖。 我希望得到所有带有selenium xpath的模板,因为我一直在发生错误。我已经设法从xpath页面下载拍卖描述,但我无法提取他们的hrefs。 我正在使用xpath finder(对于firefox)和xpath助手(对于chrome),它会显示我的链接。但是我无法尊重他们。
Bellow我正在展示我想要提取的脚本,控制台日志和链接。
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.
我想要的拍卖链接:
<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>
感谢您的帮助, 祝福
答案 0 :(得分:2)
解决方案:
我已经找到了我发现的文档,我可以提取属性。
您所要做的就是从所请求物品的正文中取出一个属性。
在我的特殊情况下,我正在寻找href(例如波纹管)。
如果您正在寻找让我们说出链接标题的内容,只需输入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")
感谢您的回复。 祝福
答案 1 :(得分:1)
您正在使用此XPath表达式:
//tbody/tr/td[3]/a[1]/@href
这是一个返回一系列属性的表达式。这很完美,因为XPath。但是,当您通过Selenium使用XPath时,对于XPath表达式可以返回的内容存在限制:与find_element(s)...
方法一起使用的XPath表达式必须返回元素,而不是其他内容。如果删除{ {1}},您将获得一个元素。如果您想要的是具有@href
属性的元素,则可以将href
替换为a[1]
。