学习资料+兼职渠道在文末!!
学习资料+兼职渠道在文末!
Selenium 由 Jason Huggins 于 2004 年发起,最初名为 JavaScript Testing Framework,后因受到希腊神话中“月亮女神 Selene”的启发而更名为 Selenium。它最初是为了解决网页自动化测试需求而诞生的开源工具,但因其能模拟真实浏览器操作(如点击、输入、滚动等),也被广泛用于网页数据爬取。爬虫工具有很多,例如 BeautifulSoup4,为什么选择自动化测试工具 Selenium 进行爬虫?目前绝大部分 Web 应用都使用 JavaScrip 动态加载数据,而 BeautifulSoup4 只能解析初始页面的 HTML 源码,对于动态加载的数据无法获取,因此使用 Selenium 模拟用户,完成数据加载的操作。
场景 | Selenium | BeautifulSoup4 |
---|---|---|
动态网页数据爬取 | ✅ 必须使用,如单页应用、JavaScript 渲染内容。 | ❌ 无法直接处理,需结合其他工具(如 Selenium 获取动态内容后解析)。 |
静态网页数据提取 | ⚠️ 可用,但效率较低。 | ✅ 推荐,快速解析固定结构的 HTML/XML。 |
登录验证/表单提交 | ✅ 直接模拟用户输入和点击。 | ❌ 需结合 Requests 会话保持,但无法处理 JavaScript 验证。 |
跨浏览器兼容性测试 | ✅ 支持多浏览器并行测试(如通过 Selenium Grid)。 | ❌ 无此功能,仅解析 HTML。 |
环境搭建与配置
安装 Selenium
创建 Python 虚拟环境后,执行命令安装 selenium
包。
pip install selenium
下载浏览器驱动
下面以 Edge 浏览器为例:
- 确认 Edge 版本:
- 设置 → 关于 Microsoft Edge。
- 设置 → 关于 Microsoft Edge。
- 下载对应版本的浏览器驱动:
- 官网:Microsoft Edge WebDriver | Microsoft Edge Developer
- 注意:驱动版本需与浏览器版本一致(如浏览器版本为116,需选择116.x.x的驱动)。
- 配置驱动路径:
- 方式一:将
edgedriver.exe
放置在任意已知的目录中或添加到系统环境变量中。from selenium import webdriver from selenium.webdriver.edge.service import Service service = Service(executable_path='D:/msedgedriver.exe') driver = webdriver.Edge(service=service)
方式二:使用
WebDriverManager
自动管理驱动# 安装 WebDriverManager pip install webdriver-manager
# 使用代码自动下载驱动 from selenium import webdriver from selenium.webdriver.edge.service import Service from webdriver_manager.microsoft import EdgeChromiumDriverManager service = Service(executable_path=EdgeChromiumDriverManager().install()) driver = webdriver.Edge(service=service)
基础操作
启动浏览器并访问网页
from selenium import webdriver from selenium.webdriver.edge.service import Service service = Service(executable_path='D:/msedgedriver.exe') driver = webdriver.Edge(service=service) driver.get("https://www.baidu.com/")
启动浏览器并访问网页
from selenium import webdriver from selenium.webdriver.edge.service import Service service = Service(executable_path='D:/msedgedriver.exe') driver = webdriver.Edge(service=service) driver.get("https://www.baidu.com/")
定位网页元素
不管是爬虫或者是测试,获取到“感兴趣”的元素才能进行后续的操作。常见的定位方法有这样几种方式:
定位方式 语法示例 适用场景 ID driver.find_element(By.ID, "username")
通过元素的 id 属性定位,唯一性高,但需要目标元素有 id CSS 选择器 driver.find_element(By.CSS_SELECTOR, ".login")
通过 CSS 选择器定位,灵活,适合复杂结构 XPath driver.find_element(By.XPATH, "//button[@type='submit']")
通过 XPath 路径定位,精准,但路径易变,维护成本高 通过 ID 定位
from selenium.webdriver.common.by import By element = driver.find_element(By.ID, "su")
通过 CSS 选择器定位
element = driver.find_element(By.CSS_SELECTOR, ".s_btn")
通过 XPath 定位
element = driver.find_element(By.XPATH, "//*[@id="su"]")
与元素交互
提取数据
# 获取页面标题 title = driver.title # 获取元素文本、属性 text = element.text href = element.get_attribute("href")
交互操作
# 输入文本 search_input = driver.find_element(By.ID, "kw") search_input.clear() # 清除原有内容 search_input.send_keys("电脑玩家张高兴") # 点击按钮 search_btn = driver.find_element(By.ID, "su") search_btn.click()
设置等待时间
driver.implicitly_wait(10) # 等待 10 秒
切换页面
Selenium 不会主动的切换窗口,要对新弹出的页面进行操作,需要先调用
switch_to
切换到该页面。# 获取所有窗口,将页面切换到最新的窗口 windows = driver.window_handles driver.switch_to.window(windows[-1])
执行 JavaScript 代码
有时网页数据是动态加载的,因此需要执行 JavaScript 代码,完成数据加载这一行为的触发。
# 模拟滚动到底部加载更多内容 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
关闭浏览器
driver.quit()
进阶技巧
使用 ActionChains 模拟用户操作
ActionChains
是 Selenium 提供的一个低级用户交互模拟工具,用于执行复杂的鼠标和键盘操作。它通过构建一系列动作(如鼠标移动、点击、拖拽、键盘按键等)的队列,模拟真实用户的操作流程。常用方法
方法 功能 move_to_element(element)
鼠标悬停在指定元素上 click(element)
点击元素 click_and_hold(element)
按住鼠标左键 context_click(element)
右键点击元素 double_click(element)
双击元素 drag_and_drop(source, target)
拖拽元素到目标位置 move_by_offset(x, y)
从当前位置移动鼠标到相对坐标(x,y) key_down(key, element)
按下某个键(如 Keys.CONTROL
),并保持按下状态key_up(key, element)
松开之前按下的键 send_keys(keys)
向当前焦点元素发送按键 模拟鼠标悬停点击菜单项
下面模拟用户用鼠标点击百度顶部菜单“更多”中的“翻译”条目。
from selenium.webdriver.common.action_chains import ActionChains # 获取相关元素 menu = driver.find_element(By.CSS_SELECTOR, "#s-top-left > div") item = driver.find_element(By.CSS_SELECTOR, "#s-top-more > div:nth-child(1) > a") # 定义动作链 actions = ActionChains(driver) actions.move_to_element(menu).pause(1).click(item).perform() # pause(1) 悬停1秒后点击
模拟键盘输入
from selenium.webdriver.common.keys import Keys # 模拟 Ctrl+C actions.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
设置请求参数
在使用 Selenium 时,有些时候会因为自动化请求而遇到各种问题,或者想优化爬虫脚本,
Options
是一个非常重要的工具,用于定制浏览器的各种行为。设置无头模式
在服务器或无界面环境中运行爬虫,避免显式启动浏览器窗口,节省资源。
from selenium.webdriver.edge.options import Options options = Options() options.add_argument("--headless=new") options.add_argument("--disable-gpu") # 部分系统需禁用 GPU 避免报错 service = Service(executable_path='D:/msedgedriver.exe') driver = webdriver.Edge(service=service, options=options)
禁用浏览器弹窗和通知
网站存在弹窗广告、通知提示(如“允许通知”),干扰自动化操作。
options.add_argument("--disable-popup-blocking") # 禁用弹窗拦截 options.add_argument("--disable-notifications") # 禁用浏览器通知
设置代理服务器
options.add_argument("--proxy-server=http://127.0.0.1:8080")
忽略 HTTPS 证书错误
访问的网站使用自签名证书或存在证书错误,导致浏览器报错。
options.add_argument("--ignore-certificate-errors")
禁用扩展程序
浏览器默认安装的扩展(如广告拦截插件)干扰页面加载或元素定位。
options.add_argument("--disable-extensions") # 禁用所有扩展 options.add_argument("--disable-extensions-except=/path/to/extension") # 通过扩展 ID 禁用某个扩展
调整窗口大小和显示
需要模拟特定分辨率或最大化窗口。
options.add_argument("--start-maximized") # 启动时最大化窗口 options.add_argument("window-size=1920x1080") # 设置固定窗口大小
设置反爬虫策略
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36") # 设置User-Agent options.add_argument("--disable-blink-features=AutomationControlled") # 禁用浏览器指纹
- 方式一:将
👉 更多学习梓料领取方式:只需【立即领取】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能