Python网络爬虫之Selenium详解
1、什么是selenium?
- Selenium是一个用于Web应用程序测试的工具。
- Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
- 支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。
- selenium也是支持无界面浏览器操作的。
2、为什么使用selenium?
模拟浏览器功能,自动执行网页中的js代码,实现动态加载
3、如何安装selenium?
需要下载驱动,咱们以谷歌浏览器为例下载谷歌驱动
①、操作谷歌浏览器驱动下载地址
http://chromedriver.storage.googleapis.com/index.html
注意:驱动的版本需要和谷歌浏览器版本一致
查看谷歌浏览器版本:在谷歌浏览器中输入 ”chrome://version/“
②、安装
pip install selenium
4、驱动的使用方式
4.1、PATH
环境变量
将下载后的驱动放到环境变量中,在命令行输入 ”chromedriver“ 如果出现一下界面说明安装成功
安装成功后代码中无需指定驱动位置:
from selenium import webdriverdriver = webdriver.Chromeurl = "https://www.baidu.com"driver.get(url)
4.2、在编写代码时指定驱动位置
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 指定驱动位置
service = Service(executable_path="/path/to/chromedriver")
driver = webdriver.Chrome(service=service)
5、Python操作selenium实例
实例环境
os:Mac
谷歌版本:111.0.5563.110
驱动版本:111.0.5563.64
selenium:4.8.3
5.1、基础
代码:注意执行完会一闪而过,是因为我们后续没有代码,自动测试结束
# 导入包
from selenium import webdriver# 创建谷歌浏览器驱动
driver = webdriver.Chrome()# 定义要浏览的网页url
url = "https://www.baidu.com"# 在浏览器中执行操作
driver.get(url)# 导入time 包 让线程睡眠4秒,可以更好的看到效果
import time
time.sleep(4)
5.2、获取浏览器相关信息
# 打开网站
driver.get(url)# 获取当前浏览器标题
title = driver.titleprint(title)# 获取当前浏览的url
cur_url = driver.current_urlprint(cur_url)# 后退:按下浏览器的后退按钮
driver.back()# 前进:按下浏览器的前进键
driver.forward()# 刷新:刷新当前页面
driver.refresh()
5.3、查找元素
先看下百度首页输入框和百度一下按钮的ID
知道了这两个输入框的ID后,我们的需求为:自动在输入框中输入”ChatGPT“,并且自动点击百度一下进行搜索,代码如下:
# 导入包
from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 创建谷歌浏览器驱动
driver = webdriver.Chrome()# 定义要浏览的网页url
url = "https://www.baidu.com"# 打开网站
driver.get(url)# 获取输入框
kw = driver.find_element(By.ID, "kw")
# 将成龙自动输入到输入框中
kw.send_keys("ChatGPT")# 获取百度一下按钮
su = driver.find_element(By.ID, "su")
# 自动点击百度一下按钮
su.click()# 睡眠4秒看效果
time.sleep(4)
具体效果大家就拷贝代码自行查看了。
代码中有用到通过ID获取input元素,然后通过send_keys 自动填充输入框,最后通过click自动触发点击事件。
定位元素所有策略如下:注意记得导入包
策略 | 描述 |
By.ID | 通过HTML元素ID获取元素 |
By.NAME | 通过HTML元素属性name值获取元素 |
By.TAG_NAME | 通过HTML元素名称获取元素 |
By.CLASS_NAME | 通过元素class属性值获取元素 |
By.CSS_SELECTOR | 通过css选择器获取元素 |
By.XPATH | 通过Xpath语法获取元素 |
By.LINK_TEXT | 通过连接文本值获取元素 |
By.PARTIAL_LINK_TEXT | 通过模糊查询文本值获取元素 |
我们通过一下代码片段实现以上每种策略实例演示
<ol id="vegetables"><li class="potatoes">…<li class="onions">…<li class="tomatoes"><span>Tomato is a Vegetable</span>…
</ol>
<ul id="fruits"><li class="bananas">…<li class="apples">…<li class="tomatoes"><span>Tomato is a Fruit</span>…
</ul>
<input type="text" name="wd"/>
<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">
<a href="https://blog.csdn.net/u011837804">个人中心</p>
代码实例:
fruits = driver.find_element(By.ID, "fruits")
fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
plants = driver.find_elements(By.TAG_NAME, "li")
wd = driver.find_element(By.NAME, "wd")
wd = driver.find_element(By.XPATH, "//input[@name='wd']")
a = driver.find_element(By.LINK_TEXT, "个人中心")
a = driver.find_element(By.PARTIAL_LINK_TEXT, "个人")
5.4、操作元素
直接上代码:
# 获取输入框
kw = driver.find_element(By.ID, "kw")# 填充输入框
kw.send_keys("成龙")# 清除输入框
kw.clear()
5.5、获取元素信息
# 获取元素是否显示 返回 布尔值
is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()# 获取元素是否启用 返回 布尔值
value = driver.find_element(By.NAME, 'btnK').is_enabled()# 针对checkbox返回是否被选中
value = driver.find_element(By.CSS_SELECTOR, "input[type='checkbox']:first-of-type").is_selected()# 获取元素标签名称
attr = driver.find_element(By.CSS_SELECTOR, "h1").tag_name# 获取元素的位置信息#元素左上角的X轴位置#元素左上角的y轴位置#元素的高度#元素的宽度
res = driver.find_element(By.CSS_SELECTOR, "h1").rect# 获取元素CSS值
cssValue = driver.find_element(By.LINK_TEXT, "More information...").value_of_css_property('color')# 获取文本内容
text = driver.find_element(By.CSS_SELECTOR, "h1").text# 获取元素属性值
email_txt = driver.find_element(By.NAME, "email_input")
value_info = email_txt.get_attribute("value")
相关文章:

Python网络爬虫之Selenium详解
1、什么是selenium? Selenium是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器…...

中睿天下受邀出席电促会第五次会员代表大会
3月21日,中国电力发展促进会(以下简称“电促会”)第五次会员代表大会暨第五届理事会第一次会议在京召开,中睿天下作为网络安全专业委员会会员单位受邀出席。 会议表决通过了第五次会员代表大会工作报告、第四届理事会财务报告、《…...

Chat GPT:软件测试人员的危机?
Chat GPT,作为一个引起科技巨头“红色警报”的人工智能语言模型,短期内便席卷全球,上线仅两个月活跃用户破亿。比尔盖茨更是如此评价“这种AI技术出现的重大历史意义,不亚于互联网和个人电脑的诞生。” 在各个行业备受关注的Chat …...

【Redis】高可用:Redis的主从复制是怎么实现的?
【Redis】高可用:主从复制详解 我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。…...

WLAN速度突然变慢
目录 一、问题 二、在设置中重置网络 1. 按下组合键“WinI”打开设置,在设置窗口中点击“网络和Internet”。 2、点击左侧的“状态”,在右侧选择“网络重置”。 3、然后会进入“网络重置”页面,点击“立即重置”后点击“是”等待完成即可…...
GDAL python教程基础篇(12)GDAL和 Pillow 的互操作
GDAL和 Pillow GDAL和PIL处理和操作的对象都是栅格图像。 但它们又不一样。 GDAL主要重点放在地理或遥感数据的读写和数据建模以及地理定位和转换, 但是PIL的重点是放在图像本身处理上的。 至于在底层数据处理上,两者都可以用 numpy 转化的二进制作为数…...
快速学习java路线建议
还有2 ,3个月就要毕业了,啥都不会的你是不是很慌呢,是不是想知道怎么样快速学习java呢。嘿嘿!它来了。 首先是java的学习 ,推荐 【尚硅谷】7天搞定Java基础,Java零…...

【MySQL】深入浅出主从复制数据同步原理
【MySQL】深入浅出主从复制数据同步原理 参考资料: 全解MySQL之主从篇:死磕主从复制中数据同步原理与优化 MySQL 日志:undo log、redo log、binlog 有什么用? 文章目录【MySQL】深入浅出主从复制数据同步原理一、主从复制架构概述…...

Redis持久化和高可用
Redis持久化和高可用一、Redis持久化1、Redis持久化的功能2、Redis提供两种方式进行持久化二、RDB持久化1、触发条件2、bgsave执行流程3、启动时加载三、Redis高可用1、什么是高可用2、Redis高可用技术四、AOF持久化(支持秒级写入)1、开启AOF2、执行流程…...

【数据结构】第六站:栈和队列
目录 一、栈 1.栈的概念和结构 2.栈的实现方案 3.栈的具体实现 4.栈的完整代码 5.有效的括号 二、队列 1.队列的概念及结构 2.队列的实现方案 3.队列的实现 4.队列实现的完整代码 一、栈 1.栈的概念和结构 栈:一种特殊的线性表,其只允许在固定…...

python matplotlib 绘制训练曲线 综合示例——平滑处理、图题设置、图例设置、字体大小、线条样式、颜色设置
文章目录1 导出曲线数据2 python简单的 绘制曲线3 Savitzky-Golay 滤波器--平滑曲线4 对y轴数值缩放处理5 设置图题、图例、字体、网格、保存曲线图6 补充6.1 python 曲线平滑处理——方法总结-详解6.2 Tensorboard可视化训练曲线导出数据用Python绘制6.3 PyTorch可视化工具-Te…...
vue-element-plus-admin整合后端实战——实现系统登录、缓存用户数据、实现动态路由
目标 整合vue-element-plus-admin前端框架,作为开发平台的前端。 准备工作 前端选用vue-element-plus-admin,地址 https://gitee.com/kailong110120130/vue-element-plus-admin。 首先clone项目,然后整合到开发平台中去。这是一个独立的前…...

Shader Graph2-PBR介绍之表面属性(图解)
PBR的实现由光线和表面属性决定,下面我们介绍一下表面属性。这个5个属性在ShaderGraph的根节点是经常的看到,左侧是Unity中的,右侧是UE中的。 在没有Metallic金属的情况下,基础颜色值就决定了颜色的漫反射值,也就是说基…...

Java多线程编程,Thread类的基本用法讲解
文章目录如何创建一个线程start 与 run线程休眠线程中断线程等待获取线程实例如何创建一个线程 之前我们介绍了什么是进程与线程,那么我们如何使用代码去创建一个线程呢?线程操作是操作系统中的概念,操作系统内核实现了线程这样的机制&#…...

TIA博途Wincc_多路复用变量的使用方法示例(实现多台相同设备参数的画面精简)
TIA博途Wincc_多路复用变量的使用方法示例(实现多台相同设备参数的画面精简) 使用多路复用变量的好处: 当项目中存在多个相同的设备(例如:变频器、电机等),对这些设备在HMI上进行监控或修改参数时,不再需要逐个建立画面或IO域等,只需通过单个画面或IO域组合即可实现对…...

关于console你不知道的那些事
看到标题,大家会不会想,我都在前端岗位叱咤风云这么多年了, console 这个玩意用你讲 但是, 今天我将带你看到不一样的 console, 可以带来更多的帮助 了解 console 什么是 console ? console 其实是 JavaScript 内的一个原生对象。内部存储的方法大部…...

Java设计模式-责任链模式
1 概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同…...

顺序表设计循环队列
使用顺序表来设计队列的最大优势是顺序表有可以定位元素的下标。 并且可以以Mod来使数组下标循环 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> typedef int CQDataType; typedef struct { int* array; in…...
UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell
一 编写源代码 OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c UINTN BootOptionPriority ( CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption ) { DEBUG ((EFI_D_ERROR," [CSDN] BootOptionPriority %S .\n", BootOption->Description)); if (StrCmp (…...

python编程:判断一个数是否是超级素数
请定义一个函数,实现判断一个数是否是超级素数,并输出判断的结果。 一、编程题目 我们都知道,素数是除了1之外只能被自身整数的数,1除外。如果一个素数,去除一位、两位或多位后依然是素数,则我们称该素数为超级素数。…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...