首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >selenium在爬虫和自动化测试中的妙用

selenium在爬虫和自动化测试中的妙用

原创
作者头像
叫我阿柒啊
发布于 2024-10-31 17:38:16
发布于 2024-10-31 17:38:16
8951
举报

前言

初识selenium,还是当时热衷于爬虫开发的时候。当时老是遇到一些js加密、动态加载的反爬措施,因为在浏览器上看到的页面,是经过浏览器内核对js执行过后数据渲染的结果。而爬虫程序获取的是原始网页,是没有经过js渲染的。

所以如果想要获取js渲染后的数据,简单的就是动态加载,在控制台找到对应的数据请求接口,然后构造参数请求接口就可以了。对于复杂的,例如之前写过的js混淆、js加密等,需要从很多js文件中推导出参数的构造过程和数据的请求过程。

在推导的过程中,主要借助浏览器控制台的Debugger,在一层层调用链中寻找蛛丝马迹。不过这种方式的确是挺耗费时间。后来就想着python是否有些包,操作类似于浏览器一样的工具,可以执行js并渲染数据后将网页内容返回给爬虫。

你还别说,你还真别说,后来就让我找到了selenium和Scrapy的splash,都可以实现上面的需求。Splash是部署在docker的一个类似于代理的api服务,在请求目标网站时,splash会渲染数据后返回给程序,通常与Scrapy爬虫框架一起使用。

而selenium是让python具备打开浏览器加载网页的一个功能,让浏览器渲染数据。但是需要下载一个浏览器的驱动,也就是说你的程序中有一个浏览器。所以我在爬虫开发时尽量避免使用selenium,但是这并不妨碍selenium对浏览器强大操作能力,以及在自动化测试中的重要地位。

selenium

selenium 是一个开源的自动化测试框架,主要用于自动化Web应用程序的测试。它能够与各种浏览器(如Chrome、Firefox、Safari等)进行交互,使得开发者和测试人员能够快速、准确地验证Web应用的功能和性能。接下来就看看selenium的主要功能:

元素定位

Selenium 提供了多种方式来定位页面元素,例如:

  1. find_element_by_id():根据id属性定位元素
  2. find_element_by_name():根据name定位元素
  3. find_element_by_class_name():根据类名寻定位元素
  4. find_element_by_xpath():根据xpath选择器定位元素
  5. find_element_by_css_selector():根据css选择器定位元素

用户操作模拟

Selenium 能够模拟用户的各种操作,包括:

  1. 点击按钮
  2. 输入文本
  3. 选择下拉框
  4. 提交表单
  5. 切换选项卡或窗口
代码语言:python
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
import time

# 配置 ChromeDriver 的路径
service = Service(r'D:\workspace\PythonDemo\chromedriver.exe')
options = Options()
driver = webdriver.Chrome(service=service, options=options)

try:
    # 打开网页
    driver.get('https://www.example.com')  # 替换为你要访问的网页

    # 1. 点击按钮
    button = driver.find_element(By.ID, 'button_id')  # 替换为按钮的 ID
    button.click()

    # 2. 输入文本
    input_field = driver.find_element(By.NAME, 'input_name')  # 替换为输入框的 name
    input_field.send_keys('Hello, Selenium!')

    # 3. 选择下拉框
    select_element = driver.find_element(By.ID, 'select_id')  # 替换为下拉框的 ID
    select = Select(select_element)
    select.select_by_visible_text('Option 1')  # 替换为你要选择的选项文本

    # 4. 提交表单
    form = driver.find_element(By.ID, 'form_id')  # 替换为表单的 ID
    form.submit()

    # 5. 切换选项卡或窗口
    original_window = driver.current_window_handle
    driver.execute_script("window.open('https://www.another-example.com');")  # 打开新窗口
    time.sleep(2)  # 等待新窗口加载
    new_window = [window for window in driver.window_handles if window != original_window][0]
    driver.switch_to.window(new_window)  # 切换到新窗口

    # 在新窗口中执行操作
    driver.get('https://www.another-example.com')  # 替换为新窗口中的网址

    # 关闭新窗口并切换回原窗口
    driver.close()
    driver.switch_to.window(original_window)

finally:
    # 关闭浏览器
    driver.quit()

等待机制

为了提高测试的稳定性,Selenium 提供了:

  1. 隐式等待:在查找元素时设置一个全局等待时间。
  2. 显式等待:在特定条件下等待某个元素变得可用或可点击。

截图功能

可以对当前浏览器窗口进行截图,方便记录测试过程中的状态和结果,帮助调试和分析问题。

代码语言:python
AI代码解释
复制
driver.get('https://www.example.com')  # 替换为你要访问的网页

# 等待网页加载
time.sleep(2)

# 截图并保存为文件
driver.get_screenshot_as_file('screenshot.png')  # 将截图保存为 screenshot.png
screenshot = driver.get_screenshot_as_png()
with open('screenshot_binary.png', 'wb') as f:
    f.write(screenshot)

处理弹出窗口和对话框

Selenium 可以轻松处理浏览器弹出窗口、模态框和 JavaScript 对话框(如 alert、confirm、prompt)。

数据驱动测试

可以与数据源(如 CSV、Excel 或数据库)结合使用,支持数据驱动测试,方便在不同数据集下重复执行测试用例。

集成测试框架

Selenium 可以与多种测试框架(如 JUnit、TestNG、pytest)结合使用,实现更强大的测试管理和报告功能。

API 测试

除了 UI 自动化测试,Selenium 也可以用于 API 测试,验证 Web 应用后端服务的功能和性能。

结语

在Scrapy的middleware中间件中,同样可以集成selenium用作一些js加密的网站爬取。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
请问这个DNA结构是如何画的?
请问这个DNA结构是如何画的?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
自动化测试Lab①—selenium模拟输入账号密码登录QQ空间
Selenium是一个广泛使用的开源自动化测试工具,主要用于Web应用程序的功能测试和自动化。它提供了一系列的API和工具,允许开发人员使用多种编程语言(如Java、Python、C#等)来编写自动化脚本。
XPcode7
2025/10/23
1320
自动化测试Lab①—selenium模拟输入账号密码登录QQ空间
自动化测试入门:从零开始搭建你的第一个WebUI项目
在深入技术细节前,我们先了解自动化测试的价值。手动测试虽然直观,但存在明显局限性:重复劳动、容易出错、耗时耗力且无法快速反馈。而自动化测试恰能弥补这些不足:
程序员二黑
2025/10/17
2610
《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》 《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受!
LOTSO
2025/10/29
890
《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
Selenium自动化脚本总报错?这7个调试技巧帮你解决90%问题
导语: 作为一名自动化测试工程师,或者正在学习Selenium的你,是否曾经在面对反复报错的脚本时,感到无比沮丧和抓狂?“在我的机器上明明是好的!”这句话是否成了你的口头禅?别担心,你不是一个人在战斗。今天,我们就来深入剖析Selenium脚本报错背后的根源,并分享7个立竿见影的调试技巧,帮你扫清90%的障碍,让你重拾自动化测试的信心与乐趣!
程序员二黑
2025/09/28
2000
Selenium自动化脚本总报错?这7个调试技巧帮你解决90%问题
selenium最大化浏览器-Web UI自动化测试之Selenium工具篇
  注意:3.0 版本下所有浏览器除了需要安装 框架 以外,还需要安装对应的驱动程序
宜轩
2022/12/26
2.4K0
【Python爬虫实战】Selenium自动化网页操作入门指南
在现代网络开发和数据爬取中,Selenium 已成为不可或缺的自动化工具之一。无论是用于测试、数据抓取,还是模拟用户行为,Selenium 都可以在不干预的情况下自动化浏览器操作,为开发者节省大量时间和精力。本指南将带您从 Selenium 的安装配置到高级操作,逐步掌握网页自动化的核心技巧。
易辰君
2024/11/07
2.5K0
selenium自动化测试报告_selenium自动化测试断言
注意:driver.close() ,当前关闭的是主窗口,只有完成页面切换才可以关闭当前新的页面
全栈程序员站长
2022/11/15
2.9K0
selenium自动化测试报告_selenium自动化测试断言
Python+Selenium爬虫:豆瓣登录反反爬策略解析
1. 引言 在当今互联网时代,数据抓取(爬虫)技术广泛应用于数据分析、市场调研、自动化测试等领域。然而,许多网站采用动态加载技术(如Ajax、React、Vue.js等框架)来渲染页面,传统的requests库无法直接获取动态生成的内容。这时,Selenium成为解决动态页面爬取的重要工具。 豆瓣作为一个典型的动态加载网站,其登录页面涉及表单提交、动态验证码、Ajax请求等复杂交互。本文将通过Python + Selenium,详细介绍如何模拟登录豆瓣,并处理动态加载的登录页面。
小白学大数据
2025/05/14
5400
用Selenium来爬取数据?真挺简单的!
于是Selenium就应运而生了,它可以算的上是自动化测试框架中的佼佼者,因为它解决了大多数用来爬取页面的模块的一个永远的痛,那就是Ajax异步加载 。今天将给大家详解如何用Selenium爬取数据,并最后附上一个真实的案例。
快学Python
2021/08/09
5.2K0
Python爬虫(二十一)_Selenium与PhantomJS
本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,更多内容请参考:Python学习指南 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。 Selenium可以根据我们的指令,让浏览器自动加载页面,获取需要的页面,甚至页面截屏,或
用户1174963
2018/01/17
3.1K0
Python爬虫(二十一)_Selenium与PhantomJS
使用Selenium自动化操作浏览器
Selenium可以自动化操作浏览器,例如:选择元素,输入,点击等,可以用于软件自动化测试,爬虫等工作,也可以做你想做的任何事情。
YaoQi
2025/07/14
4962
使用Selenium自动化操作浏览器
大模型开发实战:(一)使用 Selenium 进行网页爬虫
Selenium 由 Jason Huggins 于 2004 年发起,最初名为 JavaScript Testing Framework,后因受到希腊神话中“月亮女神 Selene”的启发而更名为 Selenium。它最初是为了解决网页自动化测试需求而诞生的开源工具,但因其能模拟真实浏览器操作(如点击、输入、滚动等),也被广泛用于网页数据爬取。爬虫工具有很多,例如 BeautifulSoup4,为什么选择自动化测试工具 Selenium 进行爬虫?目前绝大部分 Web 应用都使用 JavaScrip 动态加载数据,而 BeautifulSoup4 只能解析初始页面的 HTML 源码,对于动态加载的数据无法获取,因此使用 Selenium 模拟用户,完成数据加载的操作。
张高兴
2025/05/21
1.7K0
大模型开发实战:(一)使用 Selenium 进行网页爬虫
【Python爬虫实战】深入解析 Selenium:从元素定位到节点交互的完整自动化指南
Selenium 是进行网页自动化操作的强大工具,在测试、数据抓取、用户行为模拟等领域广泛应用。本指南将带您详细了解如何在 Selenium 中查找和定位页面元素,并深入介绍各种节点交互方法,包括点击、输入文本、选择选项等操作。无论您是初学者还是经验丰富的开发者,本篇文章将帮助您掌握 Selenium 自动化的核心技能,实现更高效的网页自动化操作。
易辰君
2024/11/07
2.2K0
探索自动化测试工具:Selenium的威力与应用
Selenium可以在多种主流浏览器中运行,包括Chrome、Firefox、Edge等。这使得开发人员可以确保他们的Web应用程序在各种浏览器中都能正常运行。
小馒头学Python
2023/11/30
1.9K0
探索自动化测试工具:Selenium的威力与应用
自动化测试工具-Helium
现在越来越多的 Web 自动化项目都在使用 Selenium,其特点为提供丰富的 API 功能、支持多语言、多平台等。
wangmcn
2022/07/26
3.3K0
自动化测试工具-Helium
ChatGPT与基于GUI的自动化测试
当使用Edge浏览器结合Selenium框架生成百度查询测试代码时,你可以使用以下Python代码示例:
顾翔
2024/09/10
5900
ChatGPT与基于GUI的自动化测试
《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波
本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手。因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙伴们或者童鞋们进行了一个登录模块的自动化测试的实例,其他的你可以照猫画虎地轻松的搞定和实现。
北京-宏哥
2019/12/12
1.7K0
python+selenium实现动态爬
AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML。过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。
py3study
2020/01/20
2.6K0
Python + Selenium 自动化爬取途牛动态网页
在互联网数据采集领域,动态网页(即通过JavaScript异步加载数据的网页)的爬取一直是一个挑战。传统的**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">requests</font>**+**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">BeautifulSoup</font>**组合适用于静态页面,但对于动态渲染的内容(如途牛旅游网的酒店、景点、评论等)则难以直接获取。
小白学大数据
2025/07/18
1510
Python + Selenium 自动化爬取途牛动态网页
前端自动化测试selenium在最新探索使用
Selenium 是一个强大的自动化测试工具,广泛用于Web应用程序的测试。随着Selenium 4的发布,它引入了许多新特性和改进,使得编写和维护自动化脚本变得更加容易。本文将深入探讨Selenium 4的一些关键新特性,特别是关联定位器(Relative Locators),以及其他一些重要的创新功能。
北京-宏哥
2024/10/28
9010
前端自动化测试selenium在最新探索使用
推荐阅读
相关推荐
自动化测试Lab①—selenium模拟输入账号密码登录QQ空间
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档