当前位置: 首页 > news >正文

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 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持通过各种driver(FirfoxDriver&#xff0c;IternetExplorerDriver&#xff0c;OperaDriver&#xff0c;ChromeDriver)驱动真实浏览器…...

中睿天下受邀出席电促会第五次会员代表大会

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

Chat GPT:软件测试人员的危机?

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

【Redis】高可用:Redis的主从复制是怎么实现的?

【Redis】高可用&#xff1a;主从复制详解 我们知道要避免单点故障&#xff0c;即保证高可用&#xff0c;便需要冗余&#xff08;副本&#xff09;方式提供集群服务。而Redis 提供了主从库模式&#xff0c;以保证数据副本的一致&#xff0c;主从库之间采用的是读写分离的方式。…...

WLAN速度突然变慢

目录 一、问题 二、在设置中重置网络 1. 按下组合键“WinI”打开设置&#xff0c;在设置窗口中点击“网络和Internet”。 2、点击左侧的“状态”&#xff0c;在右侧选择“网络重置”。 3、然后会进入“网络重置”页面&#xff0c;点击“立即重置”后点击“是”等待完成即可…...

GDAL python教程基础篇(12)GDAL和 Pillow 的互操作

GDAL和 Pillow GDAL和PIL处理和操作的对象都是栅格图像。 但它们又不一样。 GDAL主要重点放在地理或遥感数据的读写和数据建模以及地理定位和转换&#xff0c; 但是PIL的重点是放在图像本身处理上的。 至于在底层数据处理上&#xff0c;两者都可以用 numpy 转化的二进制作为数…...

快速学习java路线建议

还有2 &#xff0c;3个月就要毕业了&#xff0c;啥都不会的你是不是很慌呢&#xff0c;是不是想知道怎么样快速学习java呢。嘿嘿&#xff01;它来了。 首先是java的学习 &#xff0c;推荐 ​​​​​​【尚硅谷】7天搞定Java基础&#xff0c;Java零…...

【MySQL】深入浅出主从复制数据同步原理

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

Redis持久化和高可用

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

【数据结构】第六站:栈和队列

目录 一、栈 1.栈的概念和结构 2.栈的实现方案 3.栈的具体实现 4.栈的完整代码 5.有效的括号 二、队列 1.队列的概念及结构 2.队列的实现方案 3.队列的实现 4.队列实现的完整代码 一、栈 1.栈的概念和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定…...

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前端框架&#xff0c;作为开发平台的前端。 准备工作 前端选用vue-element-plus-admin&#xff0c;地址 https://gitee.com/kailong110120130/vue-element-plus-admin。 首先clone项目&#xff0c;然后整合到开发平台中去。这是一个独立的前…...

Shader Graph2-PBR介绍之表面属性(图解)

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

Java多线程编程,Thread类的基本用法讲解

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

TIA博途Wincc_多路复用变量的使用方法示例(实现多台相同设备参数的画面精简)

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

关于console你不知道的那些事

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

Java设计模式-责任链模式

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

顺序表设计循环队列

使用顺序表来设计队列的最大优势是顺序表有可以定位元素的下标。 并且可以以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编程:判断一个数是否是超级素数

请定义一个函数&#xff0c;实现判断一个数是否是超级素数,并输出判断的结果。 一、编程题目 我们都知道&#xff0c;素数是除了1之外只能被自身整数的数&#xff0c;1除外。如果一个素数&#xff0c;去除一位、两位或多位后依然是素数&#xff0c;则我们称该素数为超级素数。…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...