10.selenium的基本使用

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.hqwc.cn/news/495691.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统计分析笔记3

文章目录 统计检验选择正确的统计检验统计检验是做什么的?何时进行统计检验选择参数化测试:回归、比较或相关性选择非参数检验 假设检验的假设条件skewness什么是零偏度right skewleft skew计算skewnesswhat to do if your data is skewed kurtosis怎么计…

【文献管理】Zotero使用指南:软件安装 | 插件安装 | 同步 | 文献导入及引用

文章目录 1 下载2 安装3 插件安装浏览器插件:Zotero Connector翻译插件:zotero-pdf-translate笔记插件:zotero better notes为下载的学位论文添加目录中文文献识别:jasminumzotero-gptZoteroIF[Zotero DOI Manager](https://githu…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…

基于SSM的校园订餐系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的校园订餐系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

了解docker与k8s

随着 k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s 进行对比,不禁问道:Docker 不香吗? k8s 是 kubernetes 的缩写,8 代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手两者相互依存…

05 动力云客之分页查询用户 + 查询用户详情 + 新增用户

1. 用户列表分页查询实现 核心 使用pageHelper实现分页 GetMapping(value "api/users")//分页的参数可以不传, 不传就默认设置为1public R userPage(RequestParam(value "current", required false) Integer current) {if (current null) {current …

SORA 到底是什么?如何用bitget wallet购买?

什么是SORA? SORA 是一种模因币,灵感来自 OpenAI 最新的人工智能模型 Sora,它巧妙地根据文本输入生成视频。 SORA 诞生于加密社区内人工智能项目的热潮中,利用 OpenAI 的公告推出了一种独特且时尚的数字资产。正如 memecoin 网站…

浅析ARMv8体系结构:原子操作

文章目录 概述LL/SC机制独占内存访问指令多字节独占内存访问指令 独占监视器经典自旋锁实现 LSE机制原子内存操作指令CAS指令交换指令 相关参考 概述 在编程中,当多个处理器或线程访问共享数据,并且至少有一个正在写入时,操作必须是原子的&a…

react-组件基础

1.目标 能够使用函数创建组件 能够使用class创建组件 能够给React元素绑定事件 能够使用state和setState() 能够处理事件中的this指向问题 能够使用受控组件方式处理表单 2.目录 React组件介绍 React组件的两种创建方式 React事件处理 有状态组件和无状态组件 组件中的state…

Leetcoder Day26| 回溯part06:总结+三道hard题

332.重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必…

4.1.CVAT——目标检测的标注详细步骤

文章目录 1. 进入任务1. 创建任务2. 已创建的task3. 进入标注界面 2. 选择标注类型2.1 选择标注类型2.2 进行标注2.3 遮挡 2.快捷键3.导出标注结果 1. 进入任务 登录后会看到如下图界面,CVAT的标注最小单位是Task,每个Task为一个标注任务。点击Task按钮…

gitlab添加ssh公钥

一:生成公钥 桌面鼠标右击打开 Open Git Bash here (前提是安装了Git); 2.输入命令 ssh-keygen -t rsa -C "123*****90qq.com"来生成新的密钥对,将其中的"123*****90qq.com"替换为你自己的电子邮件地址。 命令:ssh-keyg…