【发布时间】:2018-08-22 09:20:52
【问题描述】:
我目前正在使用 selenium、bs4 和 python 进行抓取,但是在检查 Xpath 是否存在时遇到了问题,这是我的代码:
def hasXpath(xpath):
try:
browser.get(quote_page)
self.browser.find_element_by_xpath(xpath)
return True
except:
return False
# IF PRICELIST EXISTS CONDITION/
if hasXpath("(//div[@id='product-header h4']//span)[last()-2]") or hasXpath("(//div[@id='product-header']//span)[last()-1]") or hasXpath("(//div[@id='product-header']//span)[last()]"):
#No. of Items Per Retail(NEED LOGIN)
somthing = browser.find_element_by_xpath("(//div[@id='product-header']//td)[21]").get_attribute("innerText")
print(somthing)
#Retail Price(NEED LOGIN)
browser.get(quote_page)
somthing1 = browser.find_element_by_xpath("(//div[@id='product-header']//span)[last()]").get_attribute("innerText")
print(somthing1)
if hasXpath("(//div[@id='product-header']//span)[last()-1]"):
#1No. of Items Per Retail(NEED LOGIN)
something = browser.find_element_by_xpath("(//div[@id='product-header']//td)[19]").get_attribute("innerText")
print(something)
#1Retail Price(NEED LOGIN)
browser.get(quote_page)
something = browser.find_element_by_xpath("(//div[@id='product-header']//span)[last()-1]").get_attribute("innerText")
print(something1)
else:
print("It didn't go inside")
如您所见,它有一个简单的函数hasXpath(),我在它下面的 IF 语句中传递条件的 xpath。但是,当我测试它时,一切似乎都在 else 语句中。我还尝试将 True 条件加倍,但没有运气。实施时我做错了什么?
【问题讨论】:
-
添加一个 minimal reproducible example,其中包含 XPath 失败的标记的缩减副本。没有这个,你的问题是不完整的。
-
checking the Xpath if it exists or not的概念基本上是模糊的。也许用户编写 xpath 来定位元素。最多您可以检查一个元素(由 xpath 标识)是否陈旧。
标签: python html selenium xpath beautifulsoup