在异常之后继续使用while循环进行for循环?

时间:2020-01-29 15:21:47

标签: python selenium

我正在尝试使用Selenium刮擦一堆网站,需要向下滚动并单击按钮。每个网址具有相同的结构,但是点击次数不同。

我的代码:

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”。它没有继续循环,有时,如果我更改了网址列表,它会在循环中间停止,并显示错误:“ ElementClickInterceptedException”

我的目标是继续并完成循环,并忽略该错误。

如何改进代码? 预先感谢

1 个答案:

答案 0 :(得分:1)

导出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()