使用Selenium Basic(VBA)获取分页总数并遍历页面的技术问题
使用Selenium获取分页总页数并遍历所有页面
刚接触Selenium的话,这个需求其实挺典型的,我来一步步给你拆解实现方法,代码都是可直接运行的(前提是你已经装好了Selenium和对应浏览器驱动)。
第一步:获取分页总页数
首先得定位到页面底部的分页组件,提取出总页数。以https://codingislove.com/为例,网站分页区域有两种方式可以拿到总页数,我都给你写出来,你按需选择:
方式1:从“Page X of Y”文本中提取
网站分页栏里会显示类似Page 1 of 6的文本,我们可以直接拆分这个文本拿到总页数:
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 # 初始化Chrome驱动(换成Firefox等其他浏览器也可以) driver = webdriver.Chrome() driver.get("https://codingislove.com/") # 等待分页信息加载完成,最多等10秒 pagination_text = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".pagination-info")) ).text # 拆分文本拿到总页数,比如把"Page 1 of 6"拆成列表,取最后一个元素转成整数 total_pages = int(pagination_text.split("of")[-1].strip()) print(f"当前网站总页数:{total_pages}")
方式2:通过最后一个页码按钮获取
如果网站分页直接列出所有数字页码按钮,也可以取最后一个按钮的文本作为总页数:
# 等待所有页码按钮加载完成 page_buttons = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".pagination li a")) ) # 筛选出纯数字的按钮文本,取最后一个就是总页数 total_pages = int([btn.text for btn in page_buttons if btn.text.isdigit()][-1]) print(f"当前网站总页数:{total_pages}")
第二步:遍历所有分页加载内容
拿到总页数后,就可以循环遍历每一页了。这里推荐直接构造分页URL的方式(比点击按钮更稳定,避免元素定位失败),这个网站的分页URL格式是https://codingislove.com/page/{页码}/,所以我们可以从1到总页数依次访问:
try: for page_num in range(1, total_pages + 1): # 构造当前页的URL current_page_url = f"https://codingislove.com/page/{page_num}/" driver.get(current_page_url) print(f"已成功加载第 {page_num} 页") # 等待页面核心内容加载完成(比如文章列表),避免提前操作导致报错 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".post-list")) ) # 这里可以添加你需要的业务逻辑,比如提取文章标题、内容等 # 示例:提取当前页所有文章标题 post_titles = driver.find_elements(By.CSS_SELECTOR, ".post-title a") for title in post_titles: print(f"- {title.text}") # 如果网站有反爬机制,可以加个短延迟,比如time.sleep(2) finally: # 操作完成后别忘了关闭浏览器 driver.quit()
一些实用提示
- 确保你已经下载了对应浏览器的驱动(比如ChromeDriver),可以配置环境变量,或者在初始化driver时指定驱动路径。
- 如果网站更新了页面结构,元素定位的CSS选择器可能会失效,记得用浏览器开发者工具重新定位元素。
- 遇到加载慢的页面,可以适当延长等待时间,或者添加显式等待,避免出现元素未加载的报错。
内容的提问来源于stack exchange,提问作者QHarr
相关产品推荐
相关产品推荐

