我有一个函数'find_products()',该函数在页面上的产品上循环并打印型号。很好从页面上抓取产品后,我希望它单击下一步(如果存在)。为了测试我的XPath,我使用“尝试”来确保该元素存在。那行得通,但当然不会循环。我正在努力将其转换为循环,并不断调用单击“下一页”并调用乘积函数,直到XPath不返回下一页链接为止。
try:
nextpage=driver.find_element_by_xpath('//span[@class="srSprite pagnNextArrow"]')
except:
find_products() # calls function with loop to extract products
print("Didnt Find Next Page")
time.sleep(10)
driver.close()
else:
find_products()
nextpage.click()
print("i just clicked next page")
time.sleep(10)
就像来自另一个用户的已批准答案一样,下面的代码块似乎有效。我可以使用的帮助是什么使下面的代码示例中的“ try”为假?当find_element_by_xpath不返回任何内容时,“尝试”是否失败并变为假?比接受的答案好还是坏?
while True:
try:
nextpage=driver.find_element_by_xpath('//span[@class="srSprite pagnNextArrow"]')
find_products()
print("clicking next page")
nextpage.click()
time.sleep(5)
except:
break
find_products() #pick up the products on the last page.
答案 0 :(得分:1)
您可以使用while
循环和bool
变量来检查刮板何时找到下一个元素。您可以像这样修改代码
found = True
while(found):
try:
nextpage=driver.find_element_by_xpath('//span[@class="srSprite pagnNextArrow"]')
except:
find_products() # calls function with loop to extract products
print("Didnt Find Next Page")
time.sleep(10)
driver.close()
found = False
else:
find_products()
nextpage.click()
print("i just clicked next page")
time.sleep(10)
答案 1 :(得分:0)
为了仅在代码未找到下一页时才终止,您应按以下方式重新组织代码:
def nextPage():
is_next_page_found = True
while is_next_page_found:
try:
nextpage=driver.find_element_by_xpath('//span[@class="srSprite pagnNextArrow"]')
except:
# this will terminate the while loop
is_next_page_found = False
else:
find_products()
nextpage.click()
time.sleep(10)
# after breaking out of the loop
driver.close()