Продолжить для l oop, в то время как l oop внутри после исключения? - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь использовать Selenium для очистки множества сайтов, которые необходимо прокрутить вниз и нажать на кнопку. Каждый URL имеет одинаковую структуру, но имеет разное количество кликов.

Мой код:

for url in url_list:
while True:
    wd.get(url)
    last_height = wd.execute_script("return document.body.scrollHeight")
    while True:
        wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        #time.sleep = time for waiting
        time.sleep(3)
        new_height = wd.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

    next_button = wd.find_element_by_link_text('next >>')
    next_button.click()

Однако код завершил только первый URL и вернул ошибку: «NoSuchElementException». Он не продолжал l oop, и иногда, если я изменил список URL, он останавливался в середине l oop с ошибкой: «ElementClickInterceptedException»

Моя цель - продолжить и завершить sh l oop и игнорируйте ошибку.

Как я могу улучшить код? Заранее спасибо

1 Ответ

1 голос
/ 29 января 2020

Вызовите WebDriverWait () и element_to_be_clickable () и используйте блок try..except, если элемент найден, затем нажмите else break.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url_list = ['https://pantip.com/profile/2892172#topics','https://pantip.com/profile/5239396#topics','https://pantip.com/profile/349866#topics']
wd=driver=webdriver.Chrome()
for url in url_list:
    print(url)
    wd.get(url)
    while True:
        wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        try:
            next_button=WebDriverWait(wd,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'a.next.numbers')))
            next_button.click()
        except:
            print("No more pages")
            break

driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...