Перебирая страницы, пока не может найти следующую ссылку - PullRequest
0 голосов
/ 04 июля 2018

У меня есть функция 'find_products ()', которая перебирает товары на странице и печатает номер модели. Это отлично работает. После того, как он соскребет продукты со страницы, я хочу, чтобы он щелкнул следующую кнопку, если она есть. Чтобы проверить мой XPath, я использую 'try', чтобы убедиться, что элемент присутствует. Это работает, но, конечно, это не петля. Я изо всех сил пытаюсь преобразовать это в цикл и продолжаю звонить, нажимая «следующая страница» и вызывая функцию продукта, пока 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» false в моем примере кода ниже? Если попытка завершается неудачно и становится ложной, когда 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 голосов
/ 04 июля 2018

Чтобы вы могли завершить работу только и только тогда, когда ваш код не находит следующую страницу, вы должны реструктурировать свой код следующим образом:

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()
0 голосов
/ 04 июля 2018

Вы можете использовать цикл 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...