当前位置: 首页 > news >正文

网页自动化测试和爬虫:Selenium库入门与进阶


网页自动化测试和爬虫:Selenium库入门与进阶

在现代Web开发和数据分析中,自动化测试和数据采集成为了开发流程中的重要部分。Python 的 Selenium 库是一种强大的工具,不仅用于网页自动化测试,也在网页爬虫中得到了广泛的应用。本文将带你从 Selenium 的基础用法入手,逐步深入到进阶技巧,帮助你轻松应对网页自动化任务。

一、Selenium简介与安装

Selenium 是一个浏览器自动化工具,可以模拟用户操作,如点击按钮、填入表单、滚动页面等。它支持多种浏览器(如 Chrome、Firefox 等),使其成为自动化测试和动态页面数据采集的强力工具。

1. 安装Selenium

使用 pip 安装 Selenium:

pip install selenium

另外,还需下载相应浏览器的驱动程序,比如 chromedrivergeckodriver。以 Chrome 为例,你可以从 ChromeDriver官网 下载对应的驱动,并将其路径加入到系统 PATH 中。

2. 快速启动

以下代码展示了如何用 Selenium 启动一个浏览器并访问指定网页。

from selenium import webdriver# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 访问网页
driver.get("https://www.example.com")# 输出网页标题
print(driver.title)# 关闭浏览器
driver.quit()

二、基本操作:定位元素

Selenium 提供了多种方式来定位页面中的元素,从最常用的 idclass name 到更高级的 CSS 选择器和 XPath。以下是一些常见的元素定位方法:

from selenium.webdriver.common.by import By# 按 ID 查找元素
element = driver.find_element(By.ID, "element_id")# 按 class name 查找元素
element = driver.find_element(By.CLASS_NAME, "element_class")# 按 name 查找元素
element = driver.find_element(By.NAME, "element_name")# 使用 CSS 选择器
element = driver.find_element(By.CSS_SELECTOR, ".class > #id")# 使用 XPath
element = driver.find_element(By.XPATH, "//tag[@attribute='value']")

三、模拟用户操作

1. 输入文本

可以用 .send_keys() 向输入框内输入文本内容,例如登录页面中的账号和密码:

# 找到输入框并输入文本
input_box = driver.find_element(By.ID, "username")
input_box.send_keys("my_username")

2. 点击按钮

按钮可以通过 .click() 方法触发点击事件。

# 点击登录按钮
login_button = driver.find_element(By.ID, "login")
login_button.click()

3. 清空文本框

使用 .clear() 方法可以清除文本框中的内容:

input_box.clear()

四、等待与超时

有时页面加载或元素显示需要一定时间,Selenium 提供了三种等待方式,以确保操作在元素完全加载后再执行:

1. 隐式等待

隐式等待在定位元素时会等待设定时间,使 Selenium 有足够时间找到元素。

driver.implicitly_wait(10)  # 10秒

2. 显式等待

显式等待允许我们设定特定条件,例如等待元素可点击或可见。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待某个按钮可点击
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "button_id")))
button.click()

3. 强制等待

强制等待可以暂停代码执行指定时间,但通常不推荐长期使用,因为它不够灵活。

import timetime.sleep(5)  # 强制等待5秒

五、处理弹窗、iframe和多窗口

1. 处理弹窗(Alert)

弹窗可以通过 alert 方法接受或取消。

alert = driver.switch_to.alert
alert.accept()  # 接受弹窗
alert.dismiss()  # 取消弹窗

2. 切换到 iframe

如果需要操作 iframe 内的元素,需先切换到该 iframe。

# 切换到 iframe
iframe = driver.find_element(By.ID, "iframe_id")
driver.switch_to.frame(iframe)# 操作 iframe 内部的元素
# ...# 切换回默认内容
driver.switch_to.default_content()

3. 处理多窗口

在多窗口环境中,可以使用 window_handles 切换窗口。

# 获取所有窗口句柄
handles = driver.window_handles# 切换到新窗口
driver.switch_to.window(handles[1])

六、网页爬虫应用:抓取动态数据

Selenium 强大的自动化功能,使其在数据爬取中非常适合处理需要用户交互的页面。以下是一个使用 Selenium 抓取动态内容的简单示例:

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 打开网页并输入搜索关键词
driver.get("https://www.google.com")
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium 教程")
search_box.send_keys(Keys.RETURN)# 获取搜索结果
results = driver.find_elements(By.CSS_SELECTOR, "h3")
for result in results:print(result.text)

七、使用无头浏览器

无头浏览器允许我们在没有浏览器窗口的情况下运行 Selenium,提高运行速度和效率,尤其适合服务器端应用。

from selenium.webdriver.chrome.options import Options# 设置无头模式
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)driver.get("https://www.example.com")
print(driver.title)
driver.quit()

八、进阶技巧

1. 滚动页面

某些页面加载内容的方式是通过滚动触发的。可以使用 JavaScript 指令来实现页面滚动。

# 滚动到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 滚动至某个元素
target = driver.find_element(By.ID, "target_id")
driver.execute_script("arguments[0].scrollIntoView();", target)

2. 模拟鼠标悬停

在一些页面中,悬停可以显示更多内容,使用 ActionChains 可以实现鼠标悬停操作。

from selenium.webdriver.common.action_chains import ActionChainselement = driver.find_element(By.ID, "hover_element")
ActionChains(driver).move_to_element(element).perform()

3. 模拟键盘操作

Selenium 可以模拟键盘事件,如全选、复制、粘贴等:

from selenium.webdriver.common.keys import Keysinput_box = driver.find_element(By.ID, "input_box")
input_box.send_keys(Keys.CONTROL, 'a')  # 全选
input_box.send_keys(Keys.CONTROL, 'c')  # 复制
input_box.send_keys(Keys.CONTROL, 'v')  # 粘贴

九、Selenium 使用建议

  1. 减少等待时间:尽量使用显式等待,避免使用固定时长的强制等待,以提高执行效率。
  2. 无头模式:在爬取数据时使用无头模式,以节省资源并加快速度。
  3. 异常处理:使用 try-except 块捕捉可能的异常,以确保代码在出现错误时不会停止。
  4. 避免频繁刷新:对于动态内容尽量避免使用频繁的页面刷新,可能会导致网站将请求封锁。

十、总结

Selenium 是一个功能全面的网页自动化测试工具,既可用于网页功能的自动化测试,又能在网页爬虫中抓取动态数据。掌握了以上基本与进阶技巧,相信你已经可以用 Selenium 轻松应对各种网页交互场景。在实际项目中,通过合理地使用等待和浏览器选项,Selenium 可以成为非常高效、稳定的数据获取和测试工具。

相关文章:

网页自动化测试和爬虫:Selenium库入门与进阶

网页自动化测试和爬虫:Selenium库入门与进阶 在现代Web开发和数据分析中,自动化测试和数据采集成为了开发流程中的重要部分。Python 的 Selenium 库是一种强大的工具,不仅用于网页自动化测试,也在网页爬虫中得到了广泛的应用。本…...

Cells 单元

Goto Data Grid 数据网格 Cells 单元 Content Alignment 内容对齐 显示数值的数据网格单元格会将其内容向右对齐。显示其他类型数据的单元格将其内容向左排列。若要更改单元格内容对齐方式,请处理 ColumnView.RowCellDefaultAlignment 事件。 Selection Modes 选…...

2024/11/2 安卓创建首页界面

‌Gradle 8.7 bin‌是指Gradle 8.7版本的二进制包,通常以.zip或.tar.gz格式提供。这个二进制包包含了运行Gradle所需的所有文件,用户可以直接下载并解压使用,无需从源代码编译。 首先了解最常用的布局 线性布局(从上到下&#x…...

SpringSession源码分析

默认对常规Session的理解和使用&#xff0c;如何使用Set-Cookie。 Maven库 常见的spring-session-data-redis依赖spring-session-core <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-core</artifactId&…...

IIC

IIC 目录 IIC BH1750型号的光照传感器 IIC通信协议 iic物理层 IIC软件层协议 -- 那么一主多从&#xff0c;怎么选中与指定的从机通信呢&#xff1f; 从机设备地址 -- 从手册中查看 IIC 写操作 IIC 读操作 硬件IIC和模拟 IIC 使用 模拟 IIC 使用 &#xff01;&…...

LLM Observability: Azure OpenAI (一)

作者&#xff1a;来自 Elastic Vinay Chandrasekhar•Andres Rodriguez 我们很高兴地宣布 Azure OpenAI 集成现已全面上市&#xff0c;它提供了对 Azure OpenAI 服务性能和使用的全面可观察性&#xff01;另请参阅本博客的第 2 部分 虽然我们已经提供了对 LLM 环境的可视性一段…...

qt QBrush详解

1、概述 QBrush是Qt框架中的一个基本图形对象类&#xff0c;它主要用于定义图形的填充模式。QBrush可以用于填充如矩形、椭圆形、多边形等形状&#xff0c;也可以用于绘制背景等。通过QBrush&#xff0c;可以设置填充的颜色、样式&#xff08;如实心、渐变、纹理等&#xff09…...

Excel函数CUnique连接合并指定区域的唯一值

上一篇文章向大家介绍了如何使用VBA在低版本Excel中创建unique函数的方法&#xff0c;今天我跟大家分享一下如何使用函数连接指定区域的唯一值&#xff0c;也就是将unique函数获取的唯一值连接合并成一个&#xff0c;并指定连接符。 同样&#xff0c;我们需要先创建一个自定义的…...

机械革命屏幕设置为RGB

机械革命屏幕设置为RGB 如何设为机械革命屏幕显示为RGB如何设置1.win菜单下输入“显卡控制中心”2.选择显示器3.设置为RGB4.饱和度大家设为自己舒服的就行5.调整亮度 参考来源 如何设为机械革命屏幕显示为RGB 之前买的显示器&#xff0c;感觉调成sRGB看起来非常舒服。就想着是…...

开源项目-投票管理系统

哈喽,大家好,今天主要给大家带来一个开源项目-投票管理系统 投票管理系统主要有首页,发起投票,管理投票,参与投票,查看投票等功能 首页 为用户提供了一键导航到各个功能模块的便捷途径。 新增投票 用户可以在此轻松创建新的投票活动,设置投票主题、选项等信息。 管理…...

LeetCode 104.二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1…...

Android启动流程_Init阶段

前言 本文将会介绍 Android 启动流程&#xff0c;将基于 Android 10 代码逻辑介绍原生启动过程。 bootloader 上电 -> 加载 recovery 镜像或者 boot 镜像 -> linux kernel 启动 -> 加载 init 进程 -> 加载 zygote 进程 -> systemserver 进程 -> 系统启动 …...

萤火虫算法优化BILSTM神经网络多输入回归分析

目录 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 代码 结果分析 展望 完整代码下载:的MATALB代码(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88755564 背影 bp神经网络是一种成熟的神经网络,应用非常广,本文用萤火虫算法…...

在线QP(QuotedPrintable)编码解码工具

具体前往&#xff1a;Quoted-printable在线编码解码工具-将给定文本编码为:可打印字符引用编码(简称&#xff1a;QP编码)&#xff0c;也支持在线解码...

【已解决】cra 配置路径别名 @ 后,出现 ts 报错:找不到模块“@/App”或其相应的类型声明。ts(2307)

cra 配置路径别名 后&#xff0c;出现 ts 报错&#xff1a;找不到模块“/App”或其相应的类型声明。ts(2307) 然后可以在 tsconfig.json 中配置 baseUrl 和 paths &#xff1a; {"compilerOptions": {"target": "es5","lib": [&quo…...

leetcode-643. 子数组最大平均数 I

文章目录 二 解法2.1 每次都重新计算2.2 使用窗口 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。任何误差小于 10-5 的答案都将被视为正确答案。二 解法 2.1 每次都重新计算 超时 pu…...

论分布式架构设计及其实现

一、引言 随着互联网用户规模的扩大和需求的多样化&#xff0c;传统的集中式架构已经难以支撑高并发、高可用的系统要求。分布式架构的出现&#xff0c;提供了将计算和存储分布到不同服务器上的解决方案&#xff0c;有效提高了系统的可扩展性和容灾能力。分布式架构目前已广泛…...

基于BP神经网络的手写体数字图像识别

基于BP神经网络的手写体数字图像识别 摘要 在信息化飞速发展的时代&#xff0c;光学字符识别是一个重要的信息录入与信息转化的手段&#xff0c;其中手写体数字的识别有着广泛地应用&#xff0c;如&#xff1a;邮政编码、统计报表、银行票据等等&#xff0c;因其广泛地应用范围…...

QT——串口调试助手

目录 1.QSerialPort类包含了很多有关串口的API 2.实现串口的打开 2.1 方法一&#xff1a;通过函数实现 2.2 方法二&#xff1a;在ui界面右下角实现 3. 实现定时发送 3.1类的私有成员中添加定时器QTimer timer并去构造函数中初始化它 3.2帮助文档中有QTimer类相关的说明 …...

国产操作系统卖疯了!最营收7.84亿,最低1.5亿

最近看各种报道&#xff0c;似乎国产化有提速的绩效&#xff0c;那么既然如此&#xff0c;各个国产操作系统厂商是不是都起飞了呢&#xff1f; 周末闲暇之余&#xff0c;我们来看看各家的营收表现。 银河麒麟2024年1-9月一共卖了多少钱&#xff1f; 前几天中国软件发布了202…...

动漫IP商业化新路径:AnythingtoRealCharacters2511助力二次元角色真人化营销落地

动漫IP商业化新路径&#xff1a;AnythingtoRealCharacters2511助力二次元角色真人化营销落地 1. 动漫角色真人化的商业价值 动漫IP的商业化一直是内容产业的重要课题。传统的周边商品、联名合作虽然有效&#xff0c;但缺乏突破性创新。随着AI技术的发展&#xff0c;动漫角色真…...

HUNYUAN-MT赋能Agent智能体:构建具备多语言交互能力的AI助手

HUNYUAN-MT赋能Agent智能体&#xff1a;构建具备多语言交互能力的AI助手 想象一下&#xff0c;你正在开发一个面向全球用户的智能客服助手。一位法国用户用法语咨询产品问题&#xff0c;一位日本用户用日语询问订单状态&#xff0c;而你的核心业务逻辑和知识库大部分是中文的。…...

告别驱动芯片!手把手教你用FPGA直接驱动RGB888/565屏幕(附Verilog代码)

FPGA直接驱动RGB屏幕&#xff1a;摆脱专用芯片的高效设计指南 在嵌入式系统开发中&#xff0c;显示模块往往是不可或缺的部分。传统方案通常依赖专用驱动芯片如SSD1963或RA8875来连接处理器与RGB屏幕&#xff0c;但这种架构正面临FPGA技术带来的革新。本文将揭示如何利用FPGA的…...

不止于部署:用Docker和Helm在K8s上玩转JFrog Artifactory + Xray安全扫描全家桶

云原生时代的DevSecOps实践&#xff1a;基于Docker与Helm的JFrog全家桶深度集成指南 当微服务架构成为企业数字化转型的标配&#xff0c;如何高效管理海量制品并确保其安全性&#xff0c;已成为每个技术团队必须面对的挑战。传统单机部署模式在弹性扩展、灾备能力等方面的局限性…...

会议纪要助手:OpenClaw+nanobot自动提炼讨论要点

会议纪要助手&#xff1a;OpenClawnanobot自动提炼讨论要点 1. 为什么需要自动化会议纪要 每次开完会最头疼的就是整理会议纪要。作为技术负责人&#xff0c;我每周要参加至少5场会议&#xff0c;从需求评审到技术方案讨论&#xff0c;经常一开就是两小时。会后花半小时手动整…...

Huey终极指南:为什么这个轻量级Python任务队列成为开发者的首选?

Huey终极指南&#xff1a;为什么这个轻量级Python任务队列成为开发者的首选&#xff1f; 【免费下载链接】huey a little task queue for python 项目地址: https://gitcode.com/gh_mirrors/hu/huey 在Python开发世界中&#xff0c;高效处理异步任务和定时任务是提升应用…...

构建智能体协作网络:从 MCP 资源连接到 A2A 通信的 Agentic AI 工程实践

1. 智能体协作网络的基础架构 想象一下&#xff0c;你正在指挥一支由不同专家组成的团队完成市场报告。数据分析师负责整理数据&#xff0c;文案专员负责撰写内容&#xff0c;而行政助理则负责最终分发。在AI领域&#xff0c;这样的分工协作正是通过MCP协议和A2A协议实现的。前…...

技术小白AI入门避坑指南:避开4大雷区,高效进阶不走弯路

技术小白AI入门避坑指南&#xff1a;避开4大雷区&#xff0c;高效进阶不走弯路 前言&#xff1a;作为技术小白&#xff0c;入门AI的路上&#xff0c;最可怕的不是“基础薄弱”&#xff0c;而是“走偏方向”——明明付出了时间和精力&#xff0c;却因为踩中误区&#xff0c;要么…...

Ubuntu下基于simple-rtsp-server构建轻量级实时视频流媒体服务

1. 为什么选择simple-rtsp-server搭建流媒体服务 最近在给公司搭建内部监控系统时&#xff0c;我对比了市面上七八种RTSP服务器方案&#xff0c;最终选择了simple-rtsp-server。这个用纯C语言编写的轻量级服务器&#xff0c;编译后二进制文件只有几百KB&#xff0c;但性能却出乎…...

终极go2rtc流媒体解决方案:3分钟搭建多协议摄像头管理系统

终极go2rtc流媒体解决方案&#xff1a;3分钟搭建多协议摄像头管理系统 【免费下载链接】go2rtc Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc. 项目地址: https://gitcode.com/GitHub_Tre…...