爬虫笔记之——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.…...
字节青训前端笔记 | 数据可视化基础
本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
