爬虫笔记之——selenium安装与使用(1)
爬虫笔记之——selenium安装与使用(1)
- 一、安装环境
- 1、下载Chrome浏览器驱动
- (1)查看Chrome版本
- (2)下载相匹配的Chrome驱动程序
- 地址:https://chromedriver.storage.googleapis.com/index.html
- 2、学习使用selenium
- (1)安装selenium,用pip install selenium -i 源镜像
- (2)开始编程
- 3、页面元素定位
- (1)通过ID值定位
- driver.find_element(By.ID,"kw")
- (2)通过CLASS值定位
- driver.find_element(By.CLASS_NAME,"s_ipt")
- (3)通过NAME定位
- driver.find_element(By.NAME,"wd")
- (4)通过TAG_NAME定位
- driver.find_element(By.TAG_NAME,"div")
- (5)通过XPATH语法定位
- driver.find_element(By.XPATH,"//*[@id="su"]").click()
- (6)通过CSS语法定位
- driver.find_element(By.CSS_SELECTOR,"#su").click()
- (7)通过文本定位--精确定位
- driver.find_element(By.LINKE_TEXT,"在希望的田野上")
- (8)通过部分文本定位--模糊定位
- driver.find_element(By.PRATIAL_LINK_TEXT,"希望")
- 4、操作表单元素及其他操作
- (1)输入内容、清除内容、鼠标单击
- (2)行为链
- (3)动作链
- (4)点击操作(继续学习行为链)
- 注意:鼠标滑动、拖拽是动作链,一连串的点击是行为链。
- 5、行为链中的等待(Explicit Waits)
- 认识selenium
- Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7—11),Firefox,Safari,Google,Chrome,Opera,Edge等。
一、安装环境
1、下载Chrome浏览器驱动
(1)查看Chrome版本
(2)下载相匹配的Chrome驱动程序
-
地址:https://chromedriver.storage.googleapis.com/index.html
- 打开之后,找上面查到的最新地址,如图
- 然后,把下载的压缩包解压,得到chromedriver.exe文件,复制到Python安装目录下,双击安装。
- 打开cmd命令提示符,输入Chromedriver,之后显示如下图样,就代表安装成功了。
- 以上是Chrome浏览器的驱动安装,其他浏览器可以对应下载。
2、学习使用selenium
(1)安装selenium,用pip install selenium -i 源镜像
(2)开始编程
-
下面是VSCode里面录入的代码,其中定义浏览器的时候,会自动弹出各种浏览器模式
-
运行此时的程序,会弹出浏览器界面3秒钟。此时,并没有打开任何的页面
-
继续编写代码,并点击运行,打开一个百度页面,如下图。
-
再获取百度首页的源代码,如下图。
-
上面完整代码如下,最后关闭。
# -*- coding:utf-8 -*- # pip install selenium -i 源镜像from selenium import webdriver import time # 打开谷歌浏览器 driver = webdriver.Chrome()# 使用谷歌浏览器打开百度 url = 'https://www.baidu.com' driver.get(url)# 设置打开的浏览器——窗口最大化 driver.maximize_window()# 获取源代码(注意后面没括号) response = driver.page_source print(response)time.sleep(5)driver.close()
3、页面元素定位
(1)通过ID值定位
(2)通过CLASS值定位
(3)通过NAME定位
(4)通过TAG_NAME定位
(5)通过XPATH语法定位
-
driver.find_element(By.XPATH,“//*[@id=“su”]”).click()
- 通过复制得到“//*[@id=“su”]”,然后粘贴到上面代码中
- 代码如下:
# -*- coding:utf-8 -*-import time from selenium import webdriver from selenium.webdriver.common.by import By# 打开谷歌浏览器 driver = webdriver.Chrome()# 使用谷歌浏览器打开百度 driver.get('https://www.baidu.com')# 通过CLASS值定位,此处的class值是“s_ipt” driver.find_element(By.CLASS_NAME,'s_ipt').send_keys("大家好")# 通过XPATH语法定位“百度一下”按钮,并点击 driver.find_element(By.XPATH,'//*[@id="su"]').click()time.sleep(5)
- 运行后,自动实现搜索,效果如下。
- 运行后,自动实现搜索,效果如下。
(6)通过CSS语法定位
(7)通过文本定位–精确定位
(8)通过部分文本定位–模糊定位
4、操作表单元素及其他操作
(1)输入内容、清除内容、鼠标单击
# 输入内容
send_keys('python')
# 清除输入框内容
clear()
# 鼠标单击
click()
(2)行为链
- 在用selenium操作页面时,有时要分为很多步骤,那么这个时候可以用鼠标行为链类ActionChains来完成。
# -*- coding:utf-8 -*-import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains# 打开谷歌浏览器 driver = webdriver.Chrome()# 使用谷歌浏览器打开百度 driver.get('https://www.baidu.com')# 定位搜索框 inputtag = driver.find_element(By.ID,"kw")# 百度一下按钮 submittag = driver.find_element(By.ID,"su")# 建立行为链 actions = ActionChains(driver)# 给搜索框发送数据 actions.move_to_element(inputtag) actions.send_keys_to_element(inputtag,'python')# 选中提交按钮并提交 actions.move_to_element(submittag) actions.click(submittag)# 统一执行 actions.perform() time.sleep(5)
(3)动作链
- ActionChains方法列表
click(on_element=None)——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_click(on_element=None) ——点击鼠标右键 double_click(on_element=None)——双击鼠标左键 drag_and_drop(source, tanget)——拖拽到某个元素然后松开 key_down(value, element=None)——按下某个键盘上的键 key_up(value, element=None)——松开某个键 move_to_element(to_element)——鼠标移动到某个元素 perform() ——执行链中的所有动作 release(on_element=None) ——在某个元素位界松开鼠标左键 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素 send_keys_to_element(element,*keys_to_send)——发送某个键到指定元素
- 举例说明鼠标移动。
# -*- coding:utf-8 -*-import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome() driver.get('http://sahitest.com/demo/mouseover.htm')# 定位到显示文本框,还是用xpath方法 display = driver.find_element(By.XPATH,'//input[@value="Write on hover"]') # 定位到隐藏文本框 hide = driver.find_element(By.XPATH,'//input[@value="Blank on hover"]')action = ActionChains(driver) time.sleep(3)action.move_to_element(display).perform() time.sleep(3)action.move_to_element(hide).perform() time.sleep(3)
- 效果如图。
- 举例说明鼠标拖拽的几种情况。
# -*- coding:utf-8 -*-import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome() driver.get("http://sahitest.com/demo/dragDropMooTools.htm")dragger = driver.find_element(By.XPATH, '//div[@id="dragger"]')item1 = driver.find_element(By.XPATH,'//html/body/div[2]') item2 = driver.find_element(By.XPATH,'//html/body/div[3]') item3 = driver.find_element(By.XPATH,'//html/body/div[4]') item4 = driver.find_element(By.XPATH,'//html/body/div[5]')action = ActionChains(driver)# 下面是直接拖拽的动作 action.drag_and_drop(dragger, item1).perform() time.sleep(3) # 下面是先点击目标不松开,再定位item2位置松开 action.click_and_hold(dragger).release(item2).perform() time.sleep(3) # 下面是先点击目标不松开,然后滑动到item3位置松开 action.click_and_hold(dragger).move_to_element(item3).release().perform() time.sleep(3) action.drag_and_drop(dragger, item4).perform() time.sleep(3) driver.quit()
- 结果就是每过1秒,拖拽一个蓝色的方框,到目的地。如图。
(4)点击操作(继续学习行为链)
- 示例网站:http://sahitest.com/demo/clicks.htm
# -*- coding:utf-8 -*-import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome() driver.get("http://sahitest.com/demo/clicks.htm")# 单击按钮 click_one = driver.find_element(By.XPATH, '//input[@value="click me"]')# 双击按钮 click_dbl = driver.find_element(By.XPATH, '//input[@value="dbl click me"]')# 右击按钮 click_rgt = driver.find_element(By.XPATH, '//input[@value="right click me"]')# 定义下面的一个行为链,完成单击,双击,右击 ActionChains(driver).click(click_one).double_click(click_dbl).context_click(click_rgt).perform() time.sleep(5)
- 效果如图。
-
注意:鼠标滑动、拖拽是动作链,一连串的点击是行为链。
5、行为链中的等待(Explicit Waits)
- 示例代码。
# -*- coding:utf-8 -*- import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome() driver.get("https://www.baidu.com")# 定义一个递归函数 def search():try:input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw")))input.send_keys("大家好")time.sleep(10)except TimeoutException:# 重复进入函数尝试完成return search() if __name__ =='__main__':search()
相关文章:

爬虫笔记之——selenium安装与使用(1)
爬虫笔记之——selenium安装与使用(1)一、安装环境1、下载Chrome浏览器驱动(1)查看Chrome版本(2)下载相匹配的Chrome驱动程序地址:https://chromedriver.storage.googleapis.com/index.html2、学…...

STC15单片机软串口的使用
STC15软串口的使用📖在没有使用定时器资源的情况下,根据波特率位传输时间,利用STC-ISP工具自动计算出位延时函数。 ✨在官方所提供的库函数中位传输时间函数,仅适用于使用波特率为:9600的串口数据传输: void BitTime(…...

Ansible的脚本------playbook剧本
一、剧本的前置知识点1、主机清单ansible默认的主机清单是/etc/ansible/hosts文件主机清单可以手动设置,也可以通过Dynamic Inventory动态生成一般主机名使用FQDNvi /etc/ansible/hosts [webserver] #使用方括号设置组名 www1.example.org #定…...
实验5-计算中值及分治技术
目录 1.寻找中位数(利用快速排序来寻找中位数) 2.分治方法求数组的和 3.合并排序...
dbeaver从excel导入数据笔记
场景 有excel的数据,需要做到数据库里。 方案一: 开发代码来实现。缺点是需要开发成本。 方案二: 数据库导入工具导入。不用开发,相对快速一些。 这里说下数据库工具导入。 操作过程 1、拿到excel数据文件,根据标题…...
PyTorch学习笔记:nn.MarginRankingLoss——排序损失
PyTorch学习笔记:nn.MarginRankingLoss——排序损失 torch.nn.MarginRankingLoss(margin0.0, size_averageNone, reduceNone, reductionmean)功能:创建一个排序损失函数,用于衡量输入x1x_1x1与x2x_2x2之间的排序损失(Ranking Loss)&…...
【JavaScript】34_Date对象 ,日期的格式化
8、Date Date 在JS中所有的和时间相关的数据都由Date对象来表示 对象的方法: getFullYear() 获取4位年份 getMonth() 返当前日期的月份(0-11) getDate() 返回当前是几日 getDay() 返回当前日期是周几(0-6) 0表示周日…...

计算机视觉 对比学习13篇经典论文、解读、代码
为了快速对 机器视觉中的对比学习有一个快速了解,或者后续复习,此处收录了 13篇经典论文、一些讲解地较好的博客和相应的Github代码,用不同颜色标记。 对比学习 13篇经典论文 论文代码和博客http://www.webhub123.com/#/home/detail?p…...
MySQL 选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。 在 MySQL 中就有很多系统自带的数据库,那么在操作数据库之前就必须要确定是哪一个数据库。 在 MySQL 中,USE 语句用来完成一个数据库到…...

雅思经验(9)
写作:关于趋势的上升和下降在小作文中,真的是非常常见的,所以还是要积累一下。下面给出了很多词,但是在雅思写作中并不是词越丰富,分数就越高的。雅思写作强调的是准确性:在合适的地方用合适的词和句法。不…...

java面试题(二十)中间件redis
1.1 Redis可以用来做什么? 参考答案 Redis最常用来做缓存,是实现分布式缓存的首先中间件;Redis可以作为数据库,实现诸如点赞、关注、排行等对性能要求极高的互联网需求;Redis可以作为计算工具,能用很小的…...

JavaWEB必知必会-Servlet
目录 Servlet简介Servlet快速入门Servlet配置详解ServletContext 1 Servlet简介 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码&a…...
oralce查找返回不同的值,寻找不同的表(原创)
查找返回不同的值,寻找不同的表 select case a_id when 1 then (select b_id|| ||b_desc from b where b.b_ida.a_id) else (select e_id || ||e_desc from e where e.e_ida.a_id) end from a; 以上方法的缺陷是单表,判断。今天来了个挑战&#…...

Python-第四天 Python循环语句
Python-第四天 Python循环语句一、while循环1.while循环的基础语法2.while循环的基础案例3.while循环的嵌套应用4.while循环的嵌套案例二、for循环1.for循环的基础语法1.1基础语法1.2 range语句2.for循环的嵌套应用三、循环中断 : break和continue1.continue2.break四、 综合案…...

spring中bean的生命周期(简单5步)
目录 一、概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二、例子讲解 一、概念 1.生命是bean的生命周期? 答:spring其实就是管理bean对象的工厂,它负责对象的创建&…...

10 个最难理解的 Python 概念
文章目录技术提升面向对象编程 (OOP)装饰器生成器多线程异常处理正则表达式异步/等待函数式编程元编程网络编程大家好,与其他编程语言相比,Python 是一门相对简单的编程语言,如果你想真正学透这门语言,其实可能并不容易。 今天我…...

【linux】线程概念
概念 什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程,线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中&a…...

Leg转Goh引擎和架设单机+配置登陆器教程
教程准备1、Leg版本一个2、Goh引擎一套3、电脑一台(最好联网)前言:BLUE/LEGS/Gob/Goh/九龍、4K、AspM2第一步:更换引擎1、把版本自带的LEG引擎换成Goh引擎2、删除服务端里面的exe、dll文件(也可以直接更新)3、清理登录和游戏网关里面的配置文件4、更新引…...

idea整合svn
idea整合svn svn下载 链接:https://pan.baidu.com/s/1yS3R3lEE8lm9c9Ap-ndDKg 提取码:65ur 基础步骤 IDED中配置SVN没有svn.exe解决办法 以下是两种解决方案 需要卸载原 svn(不推荐) 参考网址: https://blog.csdn.…...

字节青训前端笔记 | 数据可视化基础
本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...