爬虫笔记之——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.…...

字节青训前端笔记 | 数据可视化基础
本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...