10.selenium的基本使用

news2024/11/16 19:46:04

selenium是一个关于爬虫功能python的库,它的整体逻辑与之前的请求爬虫思路不同。selenium是模拟出一个浏览器,你通过代码操作这个浏览器从而获取一些信息,比如执行click()就相当于点击了浏览器中的某个元素,相当于是针对浏览器的鼠标键盘宏

目录

1  安装selenium

2  连通selenium与浏览器

3  获取网页的内容 page_source

4  手动关闭浏览器 quit()

5  获取页面中某个指定的元素 find_elements()

6  在输入框中输入内容 send_keys()

7  点击指定的按钮 click()

8  执行js代码 execute_script

9  回退 back()

10  前进 forward()

11  iframe切换 switch_to.frame()

12  无可视化浏览器

13  获取元素左上角坐标 location

14  获取元素的长和宽 size

15  截图 save_screenshot()

16  反反爬策略

17  动作链 ActionChains

17.1  拖拽 drag_and_drop().perform()

17.2  点击后长按然后拖拽然后松开鼠标

17.3  根据指定元素将鼠标移动到相对位置然后点击


1  安装selenium

pip install selenium

2  连通selenium与浏览器

由于我的谷歌浏览器是最新的,没有匹配我浏览器的驱动,所以未成功。但Edge可以成功

我们先查看当前谷歌浏览器的版本,找到设置

之后在这个链接中下载驱动 ChromeDriver - WebDriver for Chrome - Downloads

驱动号就是浏览器的版本号,但是最新的驱动并没有我们当前浏览器的版本。我们看一下不匹配的情况

下载解压后会得到一个exe,之后增加一个 键位geckodriver,值为驱动的exe路径 的环境变量

然后运行下面这段代码,如果你使用的驱动与浏览器不匹配就会出现这个

selenium目前只支持这四个浏览器,后面的链接是他们的驱动

谷歌浏览器不行我尝试使用Edge

运行前我没有进行任何配置,并且我的Edge是最新版本

运行代码后发现会自动弹出Edge并访问百度

我后面又换了一个机器,再次使用相同的代码发现不能直接使用Edge,我们进入提示的链接中 Unable to Locate Driver Error | Selenium

向下滚动页面下载Edge的驱动

点击后进入到 Microsoft Edge WebDriver | Microsoft Edge Developer 中

这里是要跟你的版本对应,一般来讲都是最新对最新

下载后会得到一个压缩包

解压后会得到exe

把这个exe的路径放到环境变量中,我这里说一下win11添加环境变量的方法。右键此电脑然后点击属性

点击高级系统设置

下面就和win10一样了

驱动不能与代码在同一个路径下,如果在了就会出问题

不需要重新启动就可以连通浏览器了

3  获取网页的内容 page_source

page_source是所有的html数据,可以通过xpath对html操作拿到html的部分数据

4  手动关闭浏览器 quit()

默认情况下执行代码后自动关闭,也可以使用quit()提前关闭

这样打开浏览器10s后关闭浏览器

使用quit()后就不能再使用browser的方法了,如果使用就会报错

5  获取页面中某个指定的元素 find_elements()

可以使用标签名,类名,ID这些信息来找。XPATH相对来说更方便

比如我现在想找百度首页的输入框

那么我赋值这个输入框的xpath,然后这样写

  • 如果使用find_element可以找到相关的第一个元素

find_elements会返回一个列表,列表里是所有相关的元素

6  在输入框中输入内容 send_keys()

  • 不加time.sleep()就直接关闭了,不好截图

7  点击指定的按钮 click()

  • double_click是点两下。context_click()是右键点击。这两个用的比较少,我没有验证过

比如我想点这个按钮

8  执行js代码 execute_script

我们执行向下滚动的代码 window.scrollTo(0,document.body.scrollHeight)

  • 有的网页需要向下滚动才能刷新出来一部分内容

在滚动前需要等待一会儿,要不还没加载就开始滚了,那样看不出来效果

发现可以进行滚动

9  回退 back()

我现在想点击完毕后再退回百度首页

发现可以成功回退

10  前进 forward()

回退之后再回到搜索hello的页面

发现可以成功前进

11  iframe切换 switch_to.frame()

在这个网页中有iframe,我想滚动这个iframe的滚动条

我们看一下结构,这里嵌套了两层iframe

所以我们这样写代码,首先根据ID切换到第一级iframe,然后通过索引(第一级下的第0个iframe)找到第二个iframe

发现可以滚动

  • 切换iframe的时间会稍微长一点

12  无可视化浏览器

  • 无可视化浏览器也叫无头浏览器
  • phantomJs也是selenium中做无头浏览器的一种写法

当我们只关心爬取到的数据而不需要爬取过程的时候,我们可以选择不打开浏览器

我们对options进行设置就可以在不打开浏览器的状态下执行爬取动作了

13  获取元素左上角坐标 location

比如我现在想得到这个图像的左上角坐标

获取元素后调用location属性

14  获取元素的长和宽 size

依然以这个图片为例

获取元素成功后可调用size属性

15  截图 save_screenshot()

我们这样截出来的图是局部的,因为浏览器并没有放到最大,如果想截图全部内容,我们需要在截图前最大化浏览器

这样我们就能获得全部内容了

如果获取到元素的location与size,我们就可以在整体截图的基础上进行局部截图,在进行截图前必须讲显示比例调整到100%,不然截取出来的图像位置不对

可以成功截取指定区域的图像

16  反反爬策略

试了一下没用

17  动作链 ActionChains

17.1  拖拽 drag_and_drop().perform()

在这个网站中 HTML5 拖放 - 菜鸟教程 可以把图像从左边拖到右边

  • perform()表示让动作链立即执行
  • action.release()表示释放动作链,也就关闭动作链

发现可以从左边拖到右边

17.2  点击后长按然后拖拽然后松开鼠标

我现在想拖拽这个灰色的方块

click_and_hold()是按下去并保持按下去的状态。move_by_offset()是根据像素移动,第一个参数是要移动的x轴像素,第二个参数是要移动的y轴像素

发现可以连续移动5次

17.3  根据指定元素将鼠标移动到相对位置然后点击

进入 图片点选验证码_图片验证码_验证码接口_在线体验_网易易盾 后点击嵌入式,然后点击验证码的图像(0,0)点之后点击图像的(50,50)点

element就是验证码图像的元素。move_to_element_with_offset()是移动到元素的相对位置。click()是点击

发现可以成功点击

  • (0,0)点是元素的中点,后面的偏置也是根据重点来说的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1482887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP-201712-2-游戏

CSP-201712-2-游戏 解题思路 初始化变量:定义整数变量n和k,分别用来存储小朋友的总数和淘汰的特定数字。然后定义了num(用来记录当前报的数)和peopleIndex(用来记录当前报数的小朋友的索引)。 初始化小朋…

《CrackCollect》

CrackCollect 类型:益智学习 视角:2d 乐趣点:趣味化英语学习,闯关增加学习动力 时间:2019 个人职责: 1、所有功能的策划讨论 2、所有开发工作 3、所有上架工作 此游戏旨在针对英语水平处于初级阶段的人&…

揭示 Wasserstein 生成对抗网络的潜力:生成建模的新范式

导 读 Wasserstein 生成对抗网络 (WGAN) 作为一项关键创新而出现,解决了经常困扰传统生成对抗网络 (GAN) 的稳定性和收敛性的基本挑战。 由 Arjovsky 等人于2017 年提出,WGAN 通过利用 Wasserstein 距离彻底改变了生成模型的训练,提供了一个…

前端监控与埋点

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

SINAMICS V90 PN 指导手册 第6章 BOP面板 LED灯、基本操作、辅助功能

概述 使用BOP可进行以下操作: 独立调试诊断参数查看参数设置SD卡驱动重启 SINAMICS V90 PN 基本操作面板 LED灯 共有两个LED状态指示灯,(RDY和COM)可用来显示驱动状态,两个LED灯都为三色(绿色/红色/黄色) LED灯状态 状态指示灯的颜色、状…

什么是VR虚拟现实|虚拟科技博物馆|VR设备购买

虚拟现实(Virtual Reality,简称VR)是一种通过计算机技术模拟出的一种全新的人机交互方式。它可以通过专门的设备(如头戴式显示器)将用户带入一个计算机生成的虚拟环境之中,使用户能够与这个虚拟环境进行交互…

1小时网络安全事件报告要求,持安零信任如何帮助用户应急响应?

12月8日,国家网信办起草发布了《网络安全事件报告管理办法(征求意见稿)》(以下简称“办法”)。拟规定运营者在发生网络安全事件时应当及时启动应急预案进行处置。 1小时报告 按照《网络安全事件分级指南》&#xff0c…

centos7单节点部署ceph(mon/mgr/osd/mgr/rgw)

使用ceph建议采用多节点多磁盘方式部署,本文章仅作为单节点部署参考,请勿用于生产环境 使用ceph建议采用多节点多磁盘方式部署,本文章仅作为单节点部署参考,请勿用于生产环境 使用ceph建议采用多节点多磁盘方式部署,…

2024年2月文章一览

2024年2月编程人总共更新了5篇文章: 1.2024年1月文章一览 2.Programming Abstractions in C阅读笔记:p283-p292 3.Programming Abstractions in C阅读笔记:p293-p302 4.Programming Abstractions in C阅读笔记:p303-p305 5.P…

如何在jupyter notebook 中下载第三方库

在anconda 中找到: Anaconda Prompt 进入页面后的样式: 在黑色框中输入: 下载第三方库的命令 第三方库: 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具,…

2024年腾讯云优惠券领取页面_代金券使用方法_新老用户均可

腾讯云代金券领取渠道有哪些?腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券,大家也可以在腾讯云百科蹲守代金券,因为腾讯云代金券领取渠道比较分散,腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

【IC前端虚拟项目】inst_buffer子模块DS与RTL编码

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 需要说明一下的是,在我所提供的文档体系里,并没有模块的DS文档哈,因为实际项目里我也不怎么写DS毕竟不是每个公司都和HISI一样对文档要求这么严格的。不过作为一个培训的虚拟项目,还是建议在时间充裕…

PaddleOCR的部署教程(实操环境安装、数据集制作、实际应用案例)

文章目录 前言 PaddleOCR简介 一、PaddleOCR环境搭建 因为我之前安装过cuda和cudnn,查看cuda的版本根据你版本安装合适的paddlepaddle版本(之前没有安装过cuda的可以看我这篇文章Ubuntu20.04配置深度学习环境yolov5最简流程) 1.创建一个…

ESP32 partitions分区表的配置

由于在使用ESP32会遇到编译出来的bin文件大于分区表的时候,因此需要我们修改分区表或者使用自定义分区表的方式来解决。(项目是使用VScode来搭建和调试的,VScode YYDS) 具体分区标的含义这里就不讲了,网上有很多文档介…

【MySQL】:高效利用MySQL函数实用指南

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL函数概论二. 字符串函数三. 数值函数四. 日期函数五. 流程函数&#x1…

C. Bitwise Operation Wizard

解题思路 可以相同先通过,找出最大值再通过每个数与取或,记录得值最大时的每个数其中的最小值与的最大 import java.io.*; import java.math.BigInteger; import java.util.Arrays; import java.util.BitSet; import java.util.HashMap; import java.ut…

StarRocks实战——携程酒店实时数仓

目录 一、实时数仓 二、实时数仓架构介绍 2.1 Lambda架构 2.2 Kappa架构 三、携程酒店实时数仓架构 3.1 架构选型 3.2 实时计算引擎选型 3.3 OLAP选型 四、携程酒店实时订单 4.1 数据源 4.2 ETL数据处理 4.3 应用效果 4.4 总结 原文大佬的这篇实时数仓建设案例有借…

代码随想录-回溯算法

组合 //未剪枝 class Solution {List<List<Integer>> ans new ArrayList<>();Deque<Integer> path new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return ans;}public void back…

js中浏览器渲染原理

JavaScript&#xff08;JS&#xff09;是一种广泛使用的编程语言&#xff0c;特别是在Web开发中。在浏览器中&#xff0c;JS被用于实现动态网页效果、交互性和用户体验的提升。然而&#xff0c;要理解JS在浏览器中的工作原理&#xff0c;我们首先需要了解浏览器的渲染过程。 浏…

C++之函数,指针

函数 1&#xff0c;函数概述 作用&#xff1a;将一段经常使用的代码封装起来&#xff0c;减少重复代码 一个较大的程序&#xff0c;一般分为若干份程序块&#xff0c;每个模块实现特定的功能 2&#xff0c;函数的定义 函数的定义一般有五个步骤&#xff1a; 1&#xff0c…