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

Python 网络数据采集(四):Selenium 自动化

Python 网络数据采集(四):Selenium 自动化

      • 前言
      • 一、背景知识
        • Selenium 4
        • Selenium WebDriver
      • 二、Selenium WebDriver 的安装与配置
      • 2.1 下载 Chrome 浏览器的驱动程序
      • 2.2 配置环境变量
      • 三、Python 安装 Selenium
      • 四、页面元素定位
        • 4.1 选择浏览器开始测试
        • 4.2 查找页面元素
          • 4.2.1 浏览器查找元素
          • 4.2.2 按 XPath 查找
          • 4.2.3 显示等待 WebDriverWait
      • 五、SOHU 邮箱自动化登录
      • 六、结尾
      • 七、参考

作者:高玉涵
时间:2024.1.11 08:30
博客:blog.csdn.net/cg_i
环境:Windows 10 专业版 22H2、Python 3.10.4、selenium 4.10.0

前言

在 WEB 功能测试领域,Selenium 是一个免费、开源、跨平台的重要工具,它可以对 Chrome、Firefox、Safari 等浏览器进行测试,支持多种语言(如 Python、Java、C#、Ruby、JavaScript 等),它足以胜任一切 WEB 功能测试任务。优点:它可以模拟浏览器,打开你需要爬取的网站,可以大概率避免被封。因为我们用 Python 的 requets 库时,有些反爬严格的网站,可以识别出你当前访问是机器,导致爬取数据失败。缺点:速度慢。因为 Selenium 必须要打开浏览器,然后模拟点击网页,这个过程和你打开浏览器访问网站一样的速度。

然而,工具本质上只是工具,并不能真正发挥价值。要让 Selenium 在爬取数据中发挥真正功能,不仅需要有强大工具,还需有有效的策略。下面我会给出一个虚构的需求,通过简单举例自动化登录 SOHU 邮箱,浅尝辄止的介绍如何使用 Selenium,方便让你了解其价值,希望大家能从中有所收获。当然,限于本人水平有限,文中举例难免会有疏漏或不当之处,敬请广大读者及同行批评指正,谢谢各位!

一、背景知识

Selenium 4

Selenium 是一系列基于 Web 的自动化工具。它提供了一系统操作函数,用于支持 Web 自动化。这些函数非常灵活,能够通过多种方式定位界面元素、操作元素并获取元素的各项信息。Selenium 2 开始引入了 WebDriver,由浏览器厂商基于一定规范提供原生级别的操作实现,就相当于用户在真实操作浏览器。时至今日,Selenium 4,已经非常成熟,本文示例采用此版本。

Selenium WebDriver

是一种简洁而紧密的编程接口,可以通过多种编程语言(例如 Python、Java、C#、Ruby等)来调用 WebDriver。支持全部主流浏览器:例如 Firefox、Safari、Edge、Chrome 及 Internet Explorer 等,在这些浏览器中的自动化操作等同于按真实用户的方式进行交互。WebDriver 标准是 W3C 标准:主要的浏览器厂商(Mozilla、Google、Apple、Microsoft等)都支持 WebDriver 标准,将据此优化浏览器及开发控制代码(可将控制代码称为驱动程序,各个浏览器拥有自身的 WebDriver 驱动程序)提供更统一的原生操作支持,使自动化脚本更加稳定。

二、Selenium WebDriver 的安装与配置

浏览器的安装很简单,这里不做过多说明,主要介绍驱动程序和语言(Python)绑定的安装与配置。对不同的浏览器,需要下载浏览器驱动程序来支持运行。这里主要以 Goolge Chrome 浏览器举例。

2.1 下载 Chrome 浏览器的驱动程序

在 Chrome 浏览器中,首先在“帮助 ”->”关于 Google Chrome“菜单中查看浏览器版本,在本例中版本号为 120.0.6099.201,如图 2-1 所示。

在这里插入图片描述

图 2-1 查看 Chrome 版本

然后访问 Chrome 浏览器的驱动程序下载页面 CNPM Binaries Mirror (npmmirror.com),找到对应版本的文件夹,如图 2-2 所示。

在这里插入图片描述

图 2-2 找到对应版本的文件夹

进入对应版本的文件夹,根据操作系统下载对应的驱动程序即可,如图 2-3 所示。

在这里插入图片描述

图 2-3 该版本下不同操作系统的 Chrome 驱动程序

2.2 配置环境变量

驱动下载完成后,建议将驱动程序的 exe 文件放在同一个文件夹下进行管理,可按图 2-4 所示。本例中存放路径为 C:\Drivers\chrome

在这里插入图片描述

图 2-4 存放驱动路径

然后还需要将文件夹配置到环境变量 Path 当中,这样 Selenium 在运行时,就可以通过环境变量 Path 找到驱动程序所在位置。

在”设置“,选择”关于“,找到单击”高级系统设置“,在弹出的”系统属性“对话框中单击”环境变量“按键。在弹出的”环境变量“对话框中,在”系统变量“选项组中,选择 Path 变量,将 C:\Drivers\chrome 添加到环境变量 Path 当中,如图 2-5 所示。

在这里插入图片描述

图 2-5 配置环境变量 Path

浏览器驱动程序的配置到此完成。

三、Python 安装 Selenium

在命令行窗口中输入以下命令,即可完成针对 Python 的 Selenium 库的安装。

pip install selenium

安装完成后,可以通过以个命令查看安装的版本。

pip show seleniumName: selenium
Version: 4.10.0
Summary:
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache 2.0
Location: c:\python310\lib\site-packages
Requires: certifi, trio, trio-websocket, urllib3
Required-by:

语言绑定安装完成后,就可以开始编写 Selenium 的相关代码了。

四、页面元素定位

4.1 选择浏览器开始测试

在此之前,我们已经配置了浏览器的驱动程序,因此可以在代码中声明 WebDriver 实例,来运行浏览器。

from selenium import webdriverdriver = webdriver.Chrome()

执行以上代码,将打开 Chrome 浏览器。

4.2 查找页面元素
4.2.1 浏览器查找元素

在进行操作之前,必须要找到相应的元素。如何才能找到这些元素?首先打开浏览器,地址栏输入 https://mail.sohu.com/fe/#/login 登录搜狐邮箱页面。 如图 4-1 所示。

在这里插入图片描述

图 4-1 SOHU 邮箱登录界面 Path

登录时,需要提供邮箱和密码。可以通过查找“请输入您的邮箱”、”请输入您的密码“来定位元素 HTML 标签位置。按下 F12 打开”开发人员工具”选中“元素”按 Ctrl+F 在查找输入框中输入“请输入您的邮箱”,如图 4-2 所示。

在这里插入图片描述

图 4-2 浏览器查找元素

重复上述方法依次找到登录邮箱用到的元素。

4.2.2 按 XPath 查找

XPath 的全称为 XML 路径语言(XML Path Language),它是一种用来确定目标对象在 XML 文档中的位置的语言。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的计算机文件系统中看到的表达式非常相似。由于 HTML 和 XML 的结构非常相似,因此 XPath 可以用于 HTML 节点的选取。通过 XPath 表达式,几乎可以选取任何相要的节点。

在 Selenium 中,可以通过以下函数查找匹配 XPath 表达式的首个元素。

find_element(By.XPATH, "//*[@placeholder='请输入您的邮箱']")

注:基本的 XPath 语法类似于在一个文件系统中定位文件,如果路径以斜线(/)开始,那么该路径就表示到一个元素的绝对路径。相对路径定位以斜线(//)开头,表示选择文档中所有满足双斜线(//)后面的规则的元素(无论层级关系)。属性定位通过前缀 @ 来指定属性名称,然后指定期望的属性值来进行定位。

4.2.3 显示等待 WebDriverWait

在查找元素时,需要等待页面全部元素加载完成,如因某些原因造成页面无法加载或超时,就会造成失败。当然你可以通过 time.sleep(5) 设定强制等待秒数,直到页面加载完成后再查找元素。即使想找的元素已经出来了,它还是会继续等待,这往往会影响程序执行效率。

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

需要通过from selenium.webdriver.support.wait import WebDriverWait 导入模块

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔步长,默认为 0.5s
  • ignored_exceptions:超时后的抛出的异常信息,默认抛出 NoSuchElementExeception 异常。

与until()或者until_not()方法结合使用

WebDriverWait(driver,10).until(method,message="")
调用该方法提供的驱动程序作为参数,直到返回值为 TrueWebDriverWait(driver,10).until_not(method,message="")
调用该方法提供的驱动程序作为参数,直到返回值为 False

在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用 until 或 until_not 里的方法,直到它返回 True 或 False。

五、SOHU 邮箱自动化登录

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWaiturl = 'https://mail.sohu.com/fe/?spm=smpc.home.top-logo.3.1701571180664h7IM3dP_1467#/login'
username = 'test@sohu.com'
password = 'test'driver = webdriver.Chrome()try:driver.get(url)mail_input = WebDriverWait(driver, 10).until(lambda d: d.find_element(By.XPATH, "//*[@placeholder='请输入您的邮箱']"))mail_input.clear()mail_input.send_keys(username)mail_pwd = WebDriverWait(driver, 10).until(lambda d: d.find_element(By.XPATH, "//*[@placeholder='请输入您的密码']"))mail_pwd.clear()mail_pwd.send_keys(password)# 登录按钮loginbtn = WebDriverWait(driver, 10).until(lambda d: d.find_element(By.XPATH, "//*[@class='btn-login fontFamily']"))loginbtn.submit() # 登录
except Exception as e:print(e)

六、结尾

通过上述极简的例子,介绍如何让自动化测试取得成功,然而如何完善和丰富其功能,其中涉及较多技术和经验。限于篇幅这里就不展开了,建议读者可搜寻相关资料阅读,还要结合实际的项目多加思考。

七、参考

  • 入门指南 | Selenium

  • XPath 教程 | 菜鸟教程 (runoob.com)

  • Python 采集网络 数据(一):BeautifulSoup

  • Python 网络数据采集(二):抓取所有网页

  • Python 网络数据采集(三):采集整个网站

相关文章:

Python 网络数据采集(四):Selenium 自动化

Python 网络数据采集(四):Selenium 自动化 前言一、背景知识Selenium 4Selenium WebDriver 二、Selenium WebDriver 的安装与配置2.1 下载 Chrome 浏览器的驱动程序2.2 配置环境变量三、Python 安装 Selenium四、页面元素定位4.1 选择浏览器开…...

实现秒杀功能设计

页面 登录页面 登录成功后,跳转商品列表 商品列表页 加载商品信息 商品详情页 根据商品id查出商品信息返回VO(包括rmiaoshaStatus、emainSeconds)前端根据数据展示秒杀按钮,点击开始秒杀 订单详情页 秒杀页面设置 后端返回秒杀…...

每天刷两道题——第十四天

1.1矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。 输入:matrix [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]] 原地算法(…...

快速掌握Postman实现接口测试

快速掌握Postman实现接口测试 Postman简介 Postman是谷歌开发的一款网页调试和接口测试工具,能够发送任何类型的http请求,支持GET/PUT/POST/DELETE等方法。Postman非常简单易用,可以直接填写URL,header,body等就可以发…...

jmeter--3.使用提取器进行接口关联

目录 1. 正则表达式提取器 1.1 提取单个数据 1.2 名词解释 1.3 提取多个数据 2. 边界值提取器 2.2 名词解释 3. JSON提取器 3.1 Json语法 3.2 名词解释 3.3 如果有多组数据,同正则方式引用数据 1. 正则表达式提取器 示例数据:{"access_to…...

移动通信系统关键技术多址接入MIMO学习(8)

1.Multiple-antenna Techniques多天线技术MIMO,从SISO到SIMO到MISO到如今的MIMO; 2.SIMO单发多收,分为选择合并、增益合并;SIMO,基站通过两路路径将信号发送到终端,因为终端接收到的两路信号都是来自同一天…...

WorkPlus AI助理为企业提供智能客服的机器人解决方案

在数字化时代,企业面临着客户服务的重要挑战。AI客服机器人成为了提升客户体验和提高工作效率的关键工具。作为一款优秀的AI助理,WorkPlus AI助理以其智能化的特点和卓越的功能,为企业提供了全新的客服机器人解决方案。 为什么选择WorkPlus A…...

python类装饰器编写单体类

1 python类装饰器编写单体类 类装饰器用于装饰类,用于管理类自身,或用于管理实例创建调用。 单体类,不管创建多少次实例,都只有一个实例的类。可以通过类装饰器管理装饰类的全部实例,实现单体类。 1.1 字典存放单体…...

Java并发Condition 详解

1.引言 在Java并发编程中,线程间的协作是一个核心话题。为了实现线程间的协作,Java提供了多种机制,其中等待/通知机制是最常见的一种。在早期版本中,我们通过Object类提供的wait、notify和notifyAll方法来实现这种机制。然而&…...

如何使用CentOS系统中的Apache服务器提供静态HTTP服务

在CentOS系统中,Apache服务器是一个常用的Web服务器软件,它可以高效地提供静态HTTP服务。以下是在CentOS中使用Apache提供静态HTTP服务的步骤: 1. 安装Apache服务器 首先,您需要确保已安装Apache服务器。可以使用以下命令安装Ap…...

Python入门0基础学习笔记

1.编程之前 在编写代码之前,还有两件事需要做: 安装 Python 解释器:计算机是没法直接读懂 Python 代码的,需要一个解释器作为中间的翻译,把代码转换成字节码之后再执行。 Python 是翻译一行执行一行。一般说的安装 …...

python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)

前言 当你需要统计训练数据中每个类别标签有多少,并且想知道坐标中心分布在图像的位置信息时,你可以利用一下脚本进行计算! 步骤 要绘制热力图来分析VOC数据的分布统计,可以按照以下步骤进行: 数据处理&#xff1…...

【回顾2023,展望2024】砥砺前行

2023年总结 转眼间,迎来了新的一年2024年,回顾2023,对于我来说是一个充满平凡但又充实又幸运的一年。这一年经历了很多的事情,包括博客创作、技术学习、出书、买房等,基本上每件事情都是一个前所未有的挑战和机遇、使…...

Stable Diffusion初体验

体验了下 Stable Diffusion 2.0 的图片生成,效果还是挺惊艳的,没有细调prompt输入,直接输入了下面的内容: generate a Elimination Game image of burnning tree, Cyberpunk style 然后点击生成,经过了10多秒的等待就输…...

缓存解析:从架构设计到Redis应用及最佳实践

典型架构设计中缓存的存储位置 在现代软件架构中,缓存是优化数据检索、提高应用性能的关键组件。缓存的存储位置多种多样,每个位置针对特定的优化目标和需求。理解这些层级对于设计高效的系统至关重要。 浏览器缓存:这是最接近用户端的缓存层…...

【C#】使用 LINQ 中的 Skip() 和 Take()进行分页,为什么要分页,分页作用是什么

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…...

2024云服务器哪家好?阿里云、腾讯云、华为云

作为多年站长使市面上大多数的云厂商的云服务器都使用过,很多特价云服务器都是新用户专享的,本文有老用户特价云服务器,阿腾云atengyun.com有多个网站、小程序等,国内头部云厂商阿里云、腾讯云、华为云、UCloud、京东云都有用过&a…...

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…...

Nginx——基础配置

和大多数软件一样,Nginx也有自己的配置文件,但它又有很多与众不同的地方,本帖就来揭开Nginx基础配置的面纱。 1、Nginx指令和指令块 了解指令和指令块有助于大家了解配置的上下文,下面是一个配置模板示例: 在这个配…...

计算机基础(存储单位)

1. 计算机中的存储单位有哪些 1.1 常见的计算机存储单位 计算机存储单位一般用bit、B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB……来表示,如下所示: bit位、比特byte(B)字节、字Kill Byte(KB)千字…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

codeforces C. Cool Partition

目录 题目简述: 思路: 总代码: https://codeforces.com/contest/2117/problem/C 题目简述: 给定一个整数数组,现要求你对数组进行分割,但需满足条件:前一个子数组中的值必须在后一个子数组中…...

TI德州仪器TPS3103K33DBVR低功耗电压监控器IC电源管理芯片详细解析

1. 基本介绍 TPS3103K33DBVR 是 德州仪器(Texas Instruments, TI) 推出的一款 低功耗电压监控器(Supervisor IC),属于 电源管理芯片(PMIC) 类别,主要用于 系统复位和电压监测。 2. …...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2

----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导,采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...