Как перестать нажимать одну и ту же кнопку, пока кнопка всегда существует по селену

1

Я столкнулся с одной проблемой, прежде чем, когда я очищаю несколько страниц с помощью Selenium, просто нажмите кнопку "Следующая страница" и используйте NoSuchElementException чтобы остановить его.

Но URL, с которым я сталкиваюсь сейчас - это элемент, который всегда существует, на последней странице, если я нажимаю кнопку следующей страницы, он просто перезагружает текущую страницу.

Кто-нибудь может помочь решить, как перестать нажимать ту же кнопку?

items=driver.find_elements_by_class_name('item')
while True:
        try:
            #click next page
            driver.find_element_by_link_text('下一页').click()
            sleep(5)
            #scrpae data here
            items=driver.find_elements_by_class_name('item')

            for i in range(0, len(items)):

               results.append(items[i])
               print(items[i])



        except NoSuchElementException:

            break        

Для деталей страницы вы можете проверить картинку ниже

Изображение 174551Полноразмерное изображение

  • 0
    ссылка на страницу ресурса?
Теги:
selenium

2 ответа

1

[Изменено]

Вы можете решить эту проблему, сопоставив URL текущей страницы и URL следующей страницы в ссылке на следующую страницу. если URL текущей страницы совпадает с URL в ссылке на следующую страницу, то это последняя страница. в противном случае продолжайте списывать.

У вас должна быть переменная, в которой вы храните URL текущей страницы, и когда вы нажимаете ссылку на следующую страницу по селену, вы получаете URL страницы и совпадаете с предыдущей.

Вот что я говорю:

url = "https://humkinar.com.pk/"
driver.get(url)
items=driver.find_elements_by_class_name('item')
current_page_url = ""
prev_page_url = url
while True:
    try:
        driver.find_element_by_link_text('下一页').click()
        current_page_url = driver.current_url
        if current_page_url != prev_page_url:
            time.sleep(5)
            items=driver.find_elements_by_class_name('item')
            for i in range(0, len(items)):
               results.append(items[i])
               print(items[i])
            prev_page_url = current_page_url
        else:
            break
    except NoSuchElementException:
        break
  • 0
    Не могли бы вы показать мне какой-нибудь код для нашей справки? заранее спасибо!
  • 0
    Вы можете получить текущий URL-адрес из веб-драйвера селена, например, такой как print driver.current_url
Показать ещё 1 комментарий
0

Как я вижу на картинке (я полагаю, что фотография, которой вы поделились, имеет последнюю страницу), проверьте для className == 'disable' в <a class='disable'> <some text in chinese></a> и break;

ОБНОВИТЬ:

items=driver.find_elements_by_class_name('item')
while True:
    try:
        #click next page
        next = driver.find_element_by_link_text('下一页')
        next.click()
        sleep(5)
        #scrpae data here
        items=driver.find_elements_by_class_name('item')

        for i in range(0, len(items)):

           results.append(items[i])
           print(items[i])

           break;        
       if(next.getAttribute('class') == 'disable'){
          throw new Exception()
       }
  • 0
    любой код для нашей справки? заранее спасибо!
  • 0
    пожалуйста, проверьте обновление в ответе ..
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню