循环浏览页面,直到找不到下一个链接

时间:2018-07-04 15:08:54

标签: python loops

我有一个函数'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.   

2 个答案:

答案 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()