目录
- 项目背景与目标
- Selenium 环境配置
- 分页处理的基本思路
- 简化后的代码示例
- 总结
正文
1. 项目背景与目标
在进行 Web 自动化测试或数据抓取时,处理分页是一个常见的需求。通过 Selenium,我们可以自动化浏览多个分页并提取每页上的信息。本文将介绍如何使用 Selenium 实现这一目标,并提供简化和优化后的代码示例。
2. Selenium 环境配置
在开始之前,确保您已经安装了 Selenium 库和相应的 WebDriver(如 ChromeDriver)。以下是基本的环境配置代码:
python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import config
def setup_driver():
# 加载配置
selenium_config = {'chrome_driver_path':'chrome_driver_path','user_data_dir':'user_data_dir'}
# 设置 ChromeDriver 的服务
service = Service(selenium_config.chrome_driver_path)
# 配置 ChromeDriver 的选项
options = Options()
options.add_argument(f'--user-data-dir={selenium_config['user_data_dir']}')
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
# 初始化 WebDriver
return webdriver.Chrome(service=service, options=options)
3. 分页处理的基本思路
我们需要遍历每一页上的文件链接,点击并提取信息。对于每一个文件链接,我们将在新标签页中打开它,获取所需的信息后再关闭标签页。最后,我们会处理下一页的按钮,直到没有下一页为止。
4. 代码示例
以下是简化和优化后的代码示例:
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def setup_driver():
import config
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
selenium_config = {'chrome_driver_path':'chrome_driver_path','user_data_dir':'user_data_dir'}
service = Service(selenium_config.chrome_driver_path)
options = Options()
options.add_argument(f'--user-data-dir={selenium_config['user_data_dir']}')
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--user-agent=Mozilla/5.0")
return webdriver.Chrome(service=service, options=options)
def click_all_links_on_page(driver):
# 执行操作
pass
def paginate_and_scrape():
driver = setup_driver()
try:
driver.get('https://XXXX/xXXX')
# 等待页面加载完成
WebDriverWait(driver, 60).until(lambda d: d.execute_script('return document.readyState') == 'complete')
print(f'This page title is : {driver.title}')
while True:
click_all_links_on_page(driver)
try:
# 获取下一页按钮元素
next_button = driver.find_element(By.XPATH, "//button[@class='btn-next' and not(@disabled)]")
next_button.click()
# 等待页面加载完成
WebDriverWait(driver, 20).until(lambda d: d.execute_script('return document.readyState') == 'complete')
except Exception as e:
print(f'Error occurred or no more next button: {e}')
break
finally:
driver.quit()
if __name__ == "__main__":
paginate_and_scrape()
5. 总结
本文介绍了如何使用 Selenium 实现自动化分页处理与信息提取。通过合理的代码简化和优化,可以提高脚本的可读性和执行效率。希望这篇博文能帮助您在实际项目中实现高效的网页信息提取。如果您有任何问题或建议,欢迎在评论区留言讨论。