是不是想爬取网页数据却被动态加载内容拦住?F12 看到的代码和爬虫爬下来的不一样,静态爬虫根本拿不到数据;又或者想做自动化测试,却不知道怎么让脚本自动点击按钮、填写表单?零基础学 Selenium,最愁的就是 “场景不会分”“工具不会用”“脚本跑不起来”。其实 Selenium 不止能做自动化测试,用来爬取动态网页也超好用!今天兔子哥就带大家从零基础入门,搞定爬虫和自动化测试两个场景,附详细步骤和代码示例,跟着学,你也能玩转 Selenium!
基础问题:Selenium 到底是啥?为啥能兼顾爬虫和测试?
可能有朋友会问:“Selenium 听着像测试工具,怎么还能爬数据?零基础学它真能学会吗?”Selenium 本质是个 “网页自动化工具”,能模拟人操作浏览器 —— 自动打开网页、点击按钮、下拉滚动条,还能获取网页渲染后的内容。正因为它能处理动态加载的内容,所以既适合解决爬虫爬不到动态数据的问题,又能做自动化测试验证网页功能。
为啥适合零基础?它用 Python 写脚本,语法简单,比其他爬虫或测试工具容易上手。爬虫场景中,它能搞定 JavaScript 动态生成的内容;测试场景中,它能代替手工重复操作。网友 “数据小白” 说:“之前用静态爬虫爬不到商品价格,学了 Selenium 后,脚本自动下拉加载,轻松拿到所有数据,现在还能用它测公司网站的登录功能,一举两得!” 所以别担心用途多,两个场景的基础操作相通,学会一个场景,另一个场景很容易上手。
环境搭建:3 步搞定,爬虫和测试通用配置
不管是爬虫还是测试,环境搭建都一样,这三步错一步,后面全白搭,新手跟着做:
步骤 1:装 Python(脚本的 “发动机”)
Selenium 脚本用 Python 写,必须先装 Python:
- 去 Python 官网(python.org)下最新版,选 “Windows Installer (64-bit)”;
- 安装时一定要勾 “Add Python to PATH”(自动配环境变量,新手最容易漏!);
- 点 “Install Now” 一路下一步,装完打开 cmd,输 “python --version”,能看到 “Python 3.x.x” 就成了。
步骤 2:装 Selenium 库(核心工具包)
打开 cmd,输一行命令就能装:
plaintext
pip install selenium回车等几分钟,出现 “Successfully installed selenium” 就成功了。如果提示 “pip 不是内部命令”,就是步骤 1 没勾 PATH,卸载重装时记得勾上。
步骤 3:下浏览器驱动(连接浏览器的 “钥匙”)
Selenium 需要驱动才能控制浏览器,以常用的 Chrome 为例:
- 查 Chrome 版本:打开 Chrome→右上角三个点→设置→关于 Chrome,记版本号(比如 128.0.6613);
- 去 Chrome 驱动官网(chromedriver.chromium.org)下对应版本驱动,选 Windows 系统;
- 解压后把驱动文件(chromedriver.exe)放 Python 安装目录(右键 Python 图标→“打开文件位置”,直接粘进去)。
| 浏览器 | 驱动名称 | 新手踩坑点 | 解决办法 |
|---|---|---|---|
| Chrome | ChromeDriver | 版本和 Chrome 不匹配 | 严格按 Chrome 版本下驱动,差一个号都报错 |
| Firefox | GeckoDriver | 驱动放错位置 | 放 Python 目录或添加到系统 PATH |
| Edge | EdgeDriver | 下成旧版 Edge 驱动 | 确认是 Chromium 内核的 Edge 驱动 |
兔子哥提示:驱动版本必须和浏览器版本对应!比如 Chrome 是 128 版,驱动就得下 128 开头的,别图省事用旧驱动,不然肯定跑不起来。
场景一:爬虫实战 —— 爬取动态加载的商品列表
很多网页数据是滚动后才加载的(比如电商商品列表),静态爬虫爬不到,用 Selenium 就能轻松搞定,步骤超详细:
步骤 1:分析目标网页
以某电商商品列表为例,目标是爬取 “商品名称” 和 “价格”,这些数据需要滚动页面才会加载更多。
步骤 2:写爬虫脚本(带注释)
新建 “goods_crawler.py”,代码如下:
python
from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time# 启动Chrome浏览器driver = webdriver.Chrome()# 打开目标网页(换成实际商品列表页)driver.get("https://www.example.com/goods")driver.maximize_window() # 最大化窗口# 滚动页面加载更多数据(滚动3次,每次等2秒)for i in range(3):# 滚动到页面底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2) # 等数据加载# 定位商品列表(用CLASS_NAME定位,根据实际网页调整)goods_list = driver.find_elements(By.CLASS_NAME, "goods-item")# 提取商品信息for goods in goods_list:# 定位商品名称(根据实际网页的元素属性调整)name = goods.find_element(By.CLASS_NAME, "goods-name").text# 定位商品价格price = goods.find_element(By.CLASS_NAME, "goods-price").textprint(f"商品:{name},价格:{price}")# 关闭浏览器driver.quit()步骤 3:运行脚本看效果
双击脚本,会自动打开 Chrome,滚动页面加载商品,控制台会打印爬取的商品名称和价格。避坑点:
- 元素定位的 CLASS_NAME 要和网页实际一致,用 F12 检查元素属性;
- 滚动后一定要加等待时间(time.sleep),不然数据没加载完就提取,会拿到空值;
- 别爬取敏感数据,遵守网站 robots 协议。
场景二:自动化测试实战 —— 验证登录功能
用 Selenium 做自动化测试,能代替手工重复验证登录、注册等功能,步骤清晰:
步骤 1:分析测试场景
目标是测试某网站登录功能:输入账号密码→点击登录→验证是否登录成功(显示欢迎信息)。
步骤 2:写测试脚本(带注释)
新建 “login_test.py”,代码如下:
python
from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time# 启动浏览器driver = webdriver.Chrome()driver.get("https://www.example.com/login") # 换成实际登录页driver.maximize_window()time.sleep(2)# 输入账号(根据实际网页的元素ID调整)username_input = driver.find_element(By.ID, "username")username_input.send_keys("test_user") # 测试账号# 输入密码password_input = driver.find_element(By.ID, "password")password_input.send_keys("test_pass123") # 测试密码# 点击登录按钮login_btn = driver.find_element(By.ID, "login-btn")login_btn.click()time.sleep(3) # 等登录完成# 验证登录成功(检查是否显示欢迎信息)try:welcome_text = driver.find_element(By.CLASS_NAME, "welcome").textprint(f"登录测试通过!欢迎信息:{welcome_text}")except:print("登录测试失败!未找到欢迎信息")# 关闭浏览器driver.quit()步骤 3:运行脚本看效果
双击脚本,浏览器会自动输入账号密码、点击登录,控制台会打印测试结果。避坑点:
- 输入框和按钮的 ID 要和网页一致,用 F12 检查准确;
- 登录后加足够等待时间,避免页面没加载完就验证;
- 用 try-except 捕获错误,让脚本更稳定,不会因为验证失败直接崩溃。
两个场景的核心区别:一张表讲清楚
| 场景 | 核心目标 | 关键点 | 常用操作 |
|---|---|---|---|
| 爬虫 | 获取动态数据 | 滚动加载、数据提取 | scrollTo、find_elements、text 提取 |
| 自动化测试 | 验证功能正确性 | 元素交互、结果验证 | send_keys、click、assert 断言 |
兔子哥提示:虽然操作有差异,但基础的元素定位(ID、CLASS_NAME)、浏览器控制(get、quit)是通用的,学会一个场景的基础,另一个场景很容易迁移。
常见错误解决:双场景都可能踩的 5 个坑
错误 1:元素定位失败,提示 “no such element”
现象:脚本说找不到元素,但网页明明有。
原因:
- 页面没加载完就定位(最常见);
- 元素在 iframe 框架里,直接定位不到。
解决方法: - 加等待时间:
time.sleep(5)(简单)或显式等待(推荐); - 切换 iframe:
driver.switch_to.frame("iframe_id")。
错误 2:爬虫爬不到数据,显示空值
现象:控制台打印的商品名称或价格是空的。
原因:滚动后数据没加载完就提取,或定位的元素不对。
解决方法:延长滚动后的等待时间;用 F12 重新检查元素属性,确保定位准确。
错误 3:测试时点击没反应,提示 “element not interactable”
现象:能找到按钮,但点击没反应,报错 “元素不可交互”。
原因:按钮被弹窗、广告遮挡,或不在可见区域。
解决方法:先滚动到按钮位置:
driver.execute_script("arguments[0].scrollIntoView();", btn),再点击。错误 4:浏览器启动后秒关,看不到过程
现象:脚本运行快,浏览器一闪就关了。
原因:脚本最后有
driver.quit(),运行完就关闭。解决方法:测试或调试时,注释掉
driver.quit(),手动关闭浏览器;爬虫脚本可以保留,自动完成后关闭。错误 5:驱动版本不匹配,启动失败
现象:浏览器启动报错,说 “driver version incompatible”。
原因:驱动版本和浏览器版本对不上。
解决方法:按步骤 3 重新查浏览器版本,下载对应驱动,替换旧驱动。
自问自答:零基础学 Selenium 常见疑问
爬虫和自动化测试,哪个场景更适合入门?
建议先从自动化测试入手!测试场景的元素定位更固定(比如登录页的输入框通常有明确 ID),交互逻辑简单(输入、点击),容易看到效果,成就感强。学会测试场景后,再学爬虫的滚动加载、数据提取会更顺。
需要学多少 Python 基础才能学 Selenium?
不用太多!会基本的变量、函数、循环就行。Selenium 脚本里的代码大多是 “调用函数”,比如
driver.get()、element.click(),不用写复杂的算法,边用边补 Python 基础完全来得及。除了 Chrome,其他浏览器能用来做这两个场景吗?
当然能!Firefox、Edge 都可以,步骤类似:下对应浏览器的驱动,脚本里把
webdriver.Chrome()换成webdriver.Firefox()或webdriver.Edge()就行,新手先练 Chrome,资料最多。最后说点实在话
零基础学 Selenium,刚开始觉得难很正常,环境搭不对、元素定位错、脚本跑失败都是必经之路。我刚开始学的时候,驱动版本不对折腾了一下午,爬虫时滚动次数不够爬不全数据,测试时按钮 ID 写错卡了好久。但当看到脚本自动爬下数据、测试通过打印结果时,那种成就感真的不一样。
别想着一口吃成胖子,先把环境搭稳,再练元素定位,然后分场景练爬虫和测试的核心操作。遇到错误别慌,把报错信息复制到百度搜,大部分问题前辈们都遇到过。Selenium 是个 “越用越顺手” 的工具,练得多了,你会发现不管是爬数据还是做测试,效率都能提高一大截。
现在就打开电脑,按步骤搭环境,先写个简单的登录测试脚本,再试试爬取商品列表,动手练才是最快的入门方法,你会发现 Selenium 真的没那么难!
标签: selenium
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~