Selenium爬取Vivareal时分页陷入无限循环的问题求助
解决Vivareal爬虫分页无限循环问题
你的问题出在判断按钮是否启用的逻辑上——Selenium的is_enabled()方法只会识别原生的disabled属性,而最后一页的按钮用的是自定义的data-disabled属性,所以之前的判断完全失效,导致无限循环。针对这个按钮的HTML结构,给你几个靠谱的解决思路:
方案1:检查data-disabled属性是否存在
直接通过get_attribute()方法获取该属性,只要属性存在(不管值为空还是其他),就判定为最后一页,终止循环:
next_btn = driver.find_element(By.CLASS_NAME, "js-change-page") # 若data-disabled属性存在,说明是最后一页 if next_btn.get_attribute("data-disabled") is not None: break # 否则继续点击下一页 next_btn.click()
方案2:判断data-page属性是否为空
最后一页按钮的data-page是空字符串,所以可以通过这个特征判断:
next_btn = driver.find_element(By.CLASS_NAME, "js-change-page") page_num = next_btn.get_attribute("data-page") # 若data-page为空,终止循环 if not page_num: break next_btn.click()
方案3:结合两个条件(最稳妥)
为了避免单一判断可能出现的异常,同时检查data-disabled和data-page:
next_btn = driver.find_element(By.CLASS_NAME, "js-change-page") has_disabled = next_btn.get_attribute("data-disabled") is not None empty_page = not next_btn.get_attribute("data-page") if has_disabled or empty_page: break next_btn.click()
额外注意事项
- 每次获取按钮前,建议用显式等待确保元素加载完成,避免出现
NoSuchElementException:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10) next_btn = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "js-change-page"))) - 点击按钮后,要等待页面内容更新完成再继续爬取,否则可能重复获取同一页数据。
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

