我想写一个代码,让Python在一个页面上刮一些数据,然后点击页面底部的“下一步”按钮,在第二页上刮一些数据,点击“下一步”按钮等,直到最后一页,点击“下一步”不再可能(因为没有“下一步”)。
我希望使代码尽可能通用,而不是事先指定要完成的单击次数。
在这个问题(How can I make Selenium click through a variable number of "next" buttons?)之后,我有下面的代码。Python不报告任何错误,但是程序在第一次迭代之后(在第一次单击“next”之后)停止。
我错过了什么?非常感谢!

driver = webdriver.Firefox()
driver.get("http://www.mywebsite_example.com")
try:
    wait = WebDriverWait(driver, 100)
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'reviews_pagination_link_nav')))
    driver.find_element_by_class_name("reviews_pagination_link_nav").click()

    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'reviews_pagination_link_nav')))
    while EC.element_to_be_clickable((By.CLASS_NAME,'reviews_pagination_link_nav')):
      driver.find_element_by_class_name("reviews_pagination_link_nav").click()
      if not driver.find_element_by_class_name("reviews_pagination_link_nav"):
        break
      wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'reviews_pagination_link_nav')))

finally:
    driver.quit()

最佳答案

我会做一个无休止的while True循环,并在抛出TimeoutException时中断它-这意味着没有页面可以留下:

wait = WebDriverWait(driver, 10)
while True:
    # grab the data

    # click next link
    try:
        element = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'reviews_pagination_link_nav')))
        element.click()
    except TimeoutException:
        break

要使其工作,您需要确保一旦您到达最后一页,带有class="reviews_pagination_link_nav"的元素不在该页上或不可单击。

09-06 04:27