python selenium xpath错误[object XrayWrapper [object Attr]]

时间:2015-03-11 10:04:41

标签: python selenium xpath

我正在编写一个脚本,用于收集基于拍卖的服务的所有拍卖。 我希望得到所有带有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>

感谢您的帮助, 祝福

2 个答案:

答案 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]