我目前正在使用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语句。我也试着把真实的情况加倍,但没有运气。我在实施这一点时做错了什么?在
问题
您似乎使用了一个不存在的变量:
self
。(至少,您的代码片段中没有任何内容表明它可能存在或者这些可能是实例方法。)如果删除包装
try: ... except: ...
,我敢打赌您会看到以下错误:解决方案
假设定义了}。在
browser
,只需删除{好处1:更好的异常处理
一般来说,您应该:
try:
块中的内容)和在您的例子中,看起来您只想保护}:
^{pr2}$find_element_by_xpath()
,而只想捕获硒的{这种特殊性会使使用
self
引起的NameError
膨胀到您可能看到的位置,从而省去了在此处发布问题的麻烦。在额外收获2:更高效的页面加载
调用函数中调用一次,调用四次。在
browser.get(quote_page)
多达六次:在脚本主体中调用两次;在^{因为您总是加载同一个页面,所以只需在脚本开始时加载一次。在
相关问题 更多 >
编程相关推荐