爬虫笔记之——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.…...
字节青训前端笔记 | 数据可视化基础
本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
