编程学习网 > 编程语言 > Python > 网页自动化测试和爬虫:Selenium库入门与进阶!!
2026
08-01

网页自动化测试和爬虫:Selenium库入门与进阶!!


在现代Web开发和数据分析中,自动化测试和数据采集成为了开发流程中的重要部分。Python Selenium 库是一种强大的工具,不仅用于网页自动化测试,也在网页爬虫中得到了广泛的应用。本文将带你从 Selenium 的基础用法入手,逐步深入到进阶技巧,帮助你轻松应对网页自动化任务。

Selenium简介与安装

Selenium 是一个浏览器自动化工具,可以模拟用户操作,如点击按钮、填入表单、滚动页面等。

它支持多种浏览器(如 ChromeFirefox 等),使其成为自动化测试和动态页面数据采集的强力工具。

1. 安装Selenium

使用 pip 安装 Selenium

pip install selenium

另外,还需下载相应浏览器的驱动程序,比如 chromedriver  geckodriver

Chrome 为例,你可以从 ChromeDriver官网 下载对应的驱动,并将其路径加入到系统 PATH 中。

2. 快速启动

以下代码展示了如何用 Selenium 启动一个浏览器并访问指定网页。

from selenium import webdriver
# 启动 Chrome 浏览器driver = webdriver.Chrome()
# 访问网页driver.get("https://www.example.com")
# 输出网页标题print(driver.title)
# 关闭浏览器driver.quit()

基本操作:定位元素

Selenium 提供了多种方式来定位页面中的元素,从最常用的 id  class name 到更高级的 CSS 选择器和 XPath。以下是一些常见的元素定位方法:

from selenium.webdriver.common.by import By
# ID 查找元素element = driver.find_element(By.ID, "element_id")
# class name 查找元素element = driver.find_element(By.CLASS_NAME, "element_class")
# name 查找元素element = driver.find_element(By.NAME, "element_name")
# 使用 CSS 选择器element = driver.find_element(By.CSS_SELECTOR, ".class > #id")
# 使用 XPathelement = driver.find_element(By.XPATH, "//tag[@attribute='value']")

模拟用户操作

1. 输入文本

可以用 .send_keys() 向输入框内输入文本内容,例如登录页面中的账号和密码:

# 找到输入框并输入文本input_box = driver.find_element(By.ID, "username")input_box.send_keys("my_username")

2. 点击按钮

按钮可以通过 .click() 方法触发点击事件。

# 点击登录按钮login_button = driver.find_element(By.ID, "login")login_button.click()

3. 清空文本框

使用 .clear() 方法可以清除文本框中的内容:

input_box.clear()

等待与超时

有时页面加载或元素显示需要一定时间,Selenium 提供了三种等待方式,以确保操作在元素完全加载后再执行:

1. 隐式等待

隐式等待在定位元素时会等待设定时间,使 Selenium 有足够时间找到元素。

driver.implicitly_wait(10)  # 10

2. 显式等待

显式等待允许我们设定特定条件,例如等待元素可点击或可见。

from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
# 等待某个按钮可点击button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "button_id")))button.click()

3. 强制等待

强制等待可以暂停代码执行指定时间,但通常不推荐长期使用,因为它不够灵活。

import timetime.sleep(5)  # 强制等待5

处理弹窗、iframe和多窗口

1. 处理弹窗(Alert

弹窗可以通过 alert 方法接受或取消。

alert = driver.switch_to.alertalert.accept()  # 接受弹窗alert.dismiss()  # 取消弹窗

2. 切换到 iframe

如果需要操作 iframe 内的元素,需先切换到该 iframe

# 切换到 iframeiframe = driver.find_element(By.ID, "iframe_id")driver.switch_to.frame(iframe)
# 操作 iframe 内部的元素# ...
# 切换回默认内容driver.switch_to.default_content()

3. 处理多窗口

在多窗口环境中,可以使用 window_handles 切换窗口。

# 获取所有窗口句柄handles = driver.window_handles
# 切换到新窗口driver.switch_to.window(handles[1])

网页爬虫应用:抓取动态数据

Selenium 强大的自动化功能,使其在数据爬取中非常适合处理需要用户交互的页面。以下是一个使用 Selenium 抓取动态内容的简单示例:

from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys
# 打开网页并输入搜索关键词driver.get("https://www.google.com")search_box = driver.find_element(By.NAME, "q")search_box.send_keys("Selenium 教程")search_box.send_keys(Keys.RETURN)
# 获取搜索结果results = driver.find_elements(By.CSS_SELECTOR, "h3")for result in results:    print(result.text)

使用无头浏览器

无头浏览器允许我们在没有浏览器窗口的情况下运行 Selenium,提高运行速度和效率,尤其适合服务器端应用。

from selenium.webdriver.chrome.options import Options
# 设置无头模式options = Options()options.add_argument("--headless")driver = webdriver.Chrome(options=options)
driver.get("https://www.example.com")print(driver.title)driver.quit()

进阶技巧

1. 滚动页面

某些页面加载内容的方式是通过滚动触发的。可以使用 JavaScript 指令来实现页面滚动。

# 滚动到底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 滚动至某个元素target = driver.find_element(By.ID, "target_id")driver.execute_script("arguments[0].scrollIntoView();", target)

2. 模拟鼠标悬停

在一些页面中,悬停可以显示更多内容,使用 ActionChains 可以实现鼠标悬停操作。

from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element(By.ID, "hover_element")ActionChains(driver).move_to_element(element).perform()

3. 模拟键盘操作

Selenium 可以模拟键盘事件,如全选、复制、粘贴等:

from selenium.webdriver.common.keys import Keys
input_box = driver.find_element(By.ID, "input_box")input_box.send_keys(Keys.CONTROL, 'a')  # 全选input_box.send_keys(Keys.CONTROL, 'c')  # 复制input_box.send_keys(Keys.CONTROL, 'v')  # 粘贴

Selenium 使用建议

1、减少等待时间:尽量使用显式等待,避免使用固定时长的强制等待,以提高执行效率。

2、无头模式:在爬取数据时使用无头模式,以节省资源并加快速度。

3、异常处理:使用 try-except 块捕捉可能的异常,以确保代码在出现错误时不会停止。

4、避免频繁刷新:对于动态内容尽量避免使用频繁的页面刷新,可能会导致网站将请求封锁。

总结

Selenium 是一个功能全面的网页自动化测试工具,既可用于网页功能的自动化测试,又能在网页爬虫中抓取动态数据。

掌握了以上基本与进阶技巧,相信你已经可以用 Selenium 轻松应对各种网页交互场景。

在实际项目中,通过合理地使用等待和浏览器选项,Selenium 可以成为非常高效、稳定的数据获取和测试工具。

以上就是“网页自动化测试和爬虫:Selenium库入门与进阶的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取