Selenium的使用
1.简介
Selenium 是一个强大的开源工具,主要用于自动化 Web 浏览器。它允许你通过编写代码来模拟用户在浏览器中的各种操作,例如点击按钮、填写表单、刷新页面等。Selenium 的核心价值在于它能够处理动态内容,特别是那些通过 JavaScript 加载的数据,这使得它在自动化测试和数据爬取领域都非常受欢迎 。
2.核心组成
Selenium WebDriver:这是 Selenium 的核心,也是目前最主要的组件。它提供了一套面向不同编程语言的 API(如 Python、Java、C#),可以直接向浏览器发送指令,驱动浏览器进行各种操作。它能够以本地化方式直接与浏览器交互,标志着浏览器自动化的飞跃 。
Selenium IDE(集成开发环境):这是一个浏览器插件(支持 Chrome、Firefox 和 Edge),主要功能是录制和回放用户在浏览器中的操作。它非常适合快速创建简单的测试脚本或进行自动化辅助的探索性测试,但不适合构建复杂、健壮的自动化套件 。
Selenium Grid:这个工具允许你在多台机器上并行运行测试。通过一个中心点来管理不同的浏览器和操作系统组合,它可以显著缩短大型测试套件的执行时间。
3.上手实例
准备:在这之前需要安装Selenium库,在命令行中运行 pip3 install selenium
OK,现在我们开始进行实例,编写一个自动化脚本:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 初始化一个 Chrome 浏览器实例
driver = webdriver.Chrome() # 确保 chromedriver 在系统路径中try:# 打开百度首页driver.get("https://www.baidu.com")# 定位到搜索框元素(通过元素的ID属性)search_box = driver.find_element(By.ID, "kw")# 在搜索框中输入文本 "Selenium"search_box.send_keys("Selenium")# 模拟键盘按下回车键进行搜索search_box.send_keys(Keys.RETURN)# 使用显式等待,确保搜索结果区域已经加载出来WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "content_left")))# 打印当前页面的标题print("搜索后的页面标题是:", driver.title)finally:# 等待一段时间让你能看到浏览器窗口import timetime.sleep(5) # 等待5秒# 关闭浏览器driver.quit()这里浏览器在完成指令后会自动关闭,这是正常现象。
代码解析:
webdriver.Chrome()启动了 Chrome 浏览器。
driver.get(url)导航到指定的网址。
driver.find_element(By.ID, "kw")通过 ID 定位页面上的搜索框。
send_keys()方法用于向输入框输入文本或模拟按键。
WebDriverWait是显式等待,它会等待某个条件(如元素出现)满足后再继续执行,这比固定的 time.sleep()更高效可靠 。
driver.quit()会关闭所有浏览器窗口并结束 WebDriver 会话,确保资源被释放。
4.查找节点
Selenium 提供了多种定位方式,如 NAME、CLASS_NAME、CSS_SELECTOR和 XPATH。其中,CSS_SELECTOR在性能和可读性上通常有较好平衡,而 XPATH则非常灵活,可以处理复杂的定位场景。
单节点实例
from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(By.ID, 'q')
input_second = browser.find_element(By.CSS_SELECTOR, '#q')
input_third = browser.find_element(By.XPATH, '//*[@id="q"]')
print(input_first, input_second, input_third)
browser.close()
多节点实例
from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements(By.CSS_SELECTOR, '.service-bd li')
print(lis)
browser.close()应用场景小结:
自动化测试:这是 Selenium 最主要和最初的用途,用于对 Web 应用程序进行功能测试、回归测试等,能极大提高测试效率和覆盖率 。
网络爬虫和数据抓取:对于需要登录、有复杂 JavaScript 渲染或反爬机制较强的网站,Selenium 可以模拟真实用户行为,有效获取动态加载的数据 。
重复性网页任务自动化:例如,自动提交表单、定期检查网页内容、批量下载网页资源等任何需要在浏览器中手动重复进行的任务,都可以用 Selenium 自动化完成 。
Selenium能做的远不止这些,今后的学习将继续深挖。
