Selenium 是一款强大的浏览器自动化测试工具,同时也被广泛用于网页爬虫开发。与传统的 HTTP 请求库不同,Selenium 通过驱动真实浏览器来模拟用户操作,能够处理 JavaScript 动态渲染的页面,因此在爬取现代 Web 应用时具有不可替代的优势。
本文将从环境搭建开始,逐步讲解 Selenium 爬虫的核心用法,包括元素定位、页面交互、数据提取、反爬应对策略以及常见问题排查,帮助读者快速掌握一套可落地的 Selenium 爬虫方案。

一、环境准备
1 安装 Python 与 Selenium
首先确保本机已安装 Python 3.7 及以上版本,然后通过 pip 安装 Selenium 库:
pip install selenium
2 下载浏览器驱动
Selenium 需要对应的浏览器驱动才能控制浏览器。以 Chrome 为例,需要下载与本地 Chrome 版本匹配的 ChromeDriver,并将其所在目录加入系统 PATH,或在代码中显式指定驱动路径。
# 以 macOS/Linux 为例,将驱动放到 /usr/local/bin 下
mv chromedriver /usr/local/bin/
3 验证安装
运行以下代码,若能成功打开浏览器窗口,说明环境配置完成:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.example.com")
print(driver.title)
driver.quit()
4 配置稳定的网络出口
网络出口是影响Google SERP访问稳定性的关键因素之一。如果大量请求长期从同一个共享出口发出,容易形成集中访问特征;而频繁更换不同地区的IP,又可能造成访问位置与浏览器环境不一致。这可能增加访问异常的概率,导致验证码增多、请求受限或数据采集不完整。
如果是需要固定地区长期查询的任务,可以选择稳定的静态住宅代理;需要覆盖多个地区,则可以根据采集需求调整对应的代理地区。
对于多业务、多地区的采集场景,建议选择像IPFoxy这类提供多样化代理的服务商,相比于单纯追求IP数量,这类代理资源IP稳定性好,IP池量大,还可以将其配置到Selenium环境中,保持地区一致性以及提升实际访问成功率。

二、元素定位方法
元素定位是 Selenium 爬虫的核心基础。Selenium 提供了多种定位策略,常用的包括以下几种:
- ID 定位:find_element(By.ID, "id_value"),速度最快,优先使用。
- Class 名称定位:find_element(By.CLASS_NAME, "class_name"),适合批量元素。
- XPath 定位:find_element(By.XPATH, "//div[@class='content']"),灵活强大,适合复杂结构。
- CSS 选择器定位:find_element(By.CSS_SELECTOR, "div.content > p"),简洁高效。
- 链接文本定位:find_element(By.LINK_TEXT, "下一页"),适合定位超链接。
在实际爬虫中,XPath 和 CSS 选择器使用最为频繁,建议重点掌握。
三、页面交互操作
1 输入与点击
模拟用户在搜索框中输入关键词并点击搜索按钮,是爬虫最常见的交互场景:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
定位输入框并输入关键词
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Selenium 爬虫")
模拟点击搜索按钮
search_button = driver.find_element(By.ID, "su")
search_button.click()
也可以直接按回车键
search_box.send_keys(Keys.RETURN)
2 等待机制
由于现代网页大量使用 Ajax 异步加载数据,直接定位元素往往会导致元素未加载完成而报错。Selenium 提供了显式等待和隐式等待两种方式:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
显式等待:最多等待 10 秒,直到元素可见
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "result")))
隐式等待:全局设置,每次查找元素时最多等待 5 秒
driver.implicitly_wait(5)
推荐优先使用显式等待,因为它能针对特定元素精确控制等待条件,避免不必要的等待时间。
3 滚动与翻页
对于无限滚动加载的页面,需要模拟滚动操作来触发数据加载:
# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
翻页操作:点击下一页按钮
next_button = driver.find_element(By.LINK_TEXT, "下一页")
next_button.click()
四、反爬应对策略
1 设置 User-Agent
部分网站会通过 User-Agent 识别爬虫程序,可以通过浏览器选项伪装请求头:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
driver = webdriver.Chrome(options=options)
2 使用无头模式
无头模式可以在不弹出浏览器窗口的情况下运行,适合部署在服务器上:
options.add_argument("–headless")
options.add_argument("–disable-gpu")
options.add_argument("–no-sandbox")

3 控制访问频率
合理设置请求间隔,避免对目标网站造成过大压力,也是降低被封风险的重要手段:
import time
每次请求后随机休眠 2-5 秒
time.sleep(random.uniform(2, 5))
总结
Selenium 爬虫的核心在于三点:一是掌握元素定位与页面交互,二是合理使用等待机制应对动态加载,三是通过伪装和限速策略降低反爬风险。对于中小规模的动态网页数据采集,Selenium 是一个简单可靠的选择。
需要注意的是,爬虫应遵守目标网站的 robots 协议和相关法律法规,合理控制访问频率,尊重数据版权。建议读者在掌握基础用法后,结合具体业务场景不断优化采集逻辑,提升爬虫的稳定性和效率。
网硕互联帮助中心






评论前必须登录!
注册