四、Selenium操作指南(一)

news2024/11/15 17:55:25

文章目录

  • 一、基本用法
    • (一)初始化浏览器对象
    • (二)访问页面
    • (三)设置浏览器大小
    • (四)刷新页面
    • (五)前进后退
  • 二、获取页面基础属性
  • 三、定位页面元素
    • (一)id定位 find_element_by_id
    • (二)name定位 find_element_by_name()根
    • (三)name定位 find_element_by_class_name()
    • (四)tag定位 find_element_by_tag_name()
    • (五)link定位 find_element_by_link_text()
    • (六)partial定位 find_element_by_partial_link_text()
    • (七)xpath定位 find_element_by_xpath()
    • (八)css定位 find_element_by_css_selector()
    • (九)find_element的By定位

一、基本用法

(一)初始化浏览器对象

在准备工作部分我们提到需要将浏览器渠道添加到环境变量或者指定绝对路径,前者可以直接初始化后者则需要进行指定。

from selenium import webdriver
 
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()
 
# 指定绝对路径的方式
path = r'C:\Users\Gdc\.wdm\drivers\chromedriver\win32\96.0.4664.45\chromedriver.exe'
browser = webdriver.Chrome(path)
 
# 关闭浏览器
browser.close()

在这里插入图片描述
初始化浏览器对象

可以看到以上是有界面的浏览器,我们还可以初始化浏览器为无界面的浏览器。

from selenium import webdriver
 
# 无界面的浏览器
option = webdriver.ChromeOptions()
option.add_argument("headless")
browser = webdriver.Chrome(options=option)
 
# 访问百度首页
browser.get(r'https://www.baidu.com/')
# 截图预览
browser.get_screenshot_as_file('截图.png')
 
# 关闭浏览器
browser.close()

在这里插入图片描述
截图

完成浏览器对象的初始化后并将其赋值给了browser对象,接下来我们就可以调用browser来执行各种方法模拟浏览器的操作了。

(二)访问页面

进行页面访问使用的是get方法,传入参数为待访问页面的URL地址即可。

from selenium import webdriver
 
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()
 
# 访问百度首页
browser.get(r'https://www.baidu.com/')
 
# 关闭浏览器
browser.close()

(三)设置浏览器大小

set_window_size()方法可以用来设置浏览器大小(就是分辨率),而maximize_window则是设置浏览器为全屏!

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
# 设置浏览器大小:全屏
browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 设置分辨率 500*500
browser.set_window_size(500,500)  
time.sleep(2)
 
# 设置分辨率 1000*800
browser.set_window_size(1000,800) 
time.sleep(2)
 
# 关闭浏览器
browser.close()

(四)刷新页面

import selenium from webdriver
import time

browser = webdriver.Chrome()

browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)

try:
	browser.refresh()
	print('刷新页面')
except Exception as e:
    print('刷新失败')
# 关闭浏览器
browser.close()

(五)前进后退

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
# 设置浏览器全屏
browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 打开淘宝页面
browser.get(r'https://www.taobao.com')  
time.sleep(2)
 
# 后退到百度页面
browser.back()  
time.sleep(2)
 
# 前进的淘宝页面
browser.forward() 
time.sleep(2)
 
# 关闭浏览器
browser.close()

二、获取页面基础属性

当我们用selenium打开某个页面,有一些基础属性如网页标题、网址、浏览器名称、页面源码等信息。

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com') 
 
# 网页标题
print(browser.title)
# 当前网址
print(browser.current_url)
# 浏览器名称
print(browser.name)
# 网页源码
print(browser.page_source)

在这里插入图片描述

三、定位页面元素

我们在实际使用浏览器的时候,很重要的操作有输入文本、点击确定等等。对此,Selenium提供了一系列的方法来方便我们实现以上操作。常说的8种定位页面元素的操作方式:
搜索框

搜索框的html结构:

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

(一)id定位 find_element_by_id

def test3():
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')
    browser.find_element_by_id('kw').send_keys('张元英')
    time.sleep(2)
    browser.close()

在这里插入图片描述

(二)name定位 find_element_by_name()根

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 在搜索框输入 python
browser.find_element_by_name('wd').send_keys('张元英')
time.sleep(2)
 
# 关闭浏览器
browser.close()

(三)name定位 find_element_by_class_name()

find_element_by_class_name()根据class属性获取,这里class属性是s_ipt

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 在搜索框输入 python
browser.find_element_by_class_name('s_ipt').send_keys('python')
time.sleep(2)
 
# 关闭浏览器
browser.close()

(四)tag定位 find_element_by_tag_name()

我们知道HTML是通过tag来定义功能的,比如input是输入,table是表格等等。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多同类tag,所以其实很难通过tag去区分不同的元素。

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 在搜索框输入 python
browser.find_element_by_tag_name('input').send_keys('python')
time.sleep(2)
 
# 关闭浏览器
browser.close()

(五)link定位 find_element_by_link_text()

这种方法顾名思义就是用来定位文本链接的,比如百度首页上方的分类模块链接。

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 点击新闻 链接
browser.find_element_by_link_text('新闻').click()
time.sleep(2)
 
# 关闭浏览器全部页面
browser.quit()

(六)partial定位 find_element_by_partial_link_text()

有时候一个超链接的文本很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 点击新闻 链接
browser.find_element_by_partial_link_text('闻').click()
time.sleep(2)
 
# 关闭浏览器全部页面
browser.quit()

(七)xpath定位 find_element_by_xpath()

前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们

但是在实际工作中并非有这么美好,那么这个时候我们就只能通过xpath或者css来定位了:

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 在搜索框输入 python
browser.find_element_by_xpath("//*[@id='kw']").send_keys('python')
time.sleep(2)
 
# 关闭浏览器
browser.close()

(八)css定位 find_element_by_css_selector()

这种方法相对xpath要简洁些,定位速度也要快些。

find_element_by_css_selector()

from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
 
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 在搜索框输入 python
browser.find_element_by_css_selector('#kw').send_keys('python')
time.sleep(2)
 
# 关闭浏览器
browser.close()

(九)find_element的By定位

除了上述的8种定位方法,Selenium还提供了一个通用的方法find_element(),这个方法有两个参数:定位方式和定位值:

# 使用前先导入By类
from selenium.webdriver.common.by import By

browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,'wd')
browser.find_element(By.CLASS_NAME,'s_ipt')
browser.find_element(By.TAG_NAME,'input')
browser.find_element(By.LINK_TEXT,'新闻')
browser.find_element(By.PARTIAL_LINK_TEXT,'闻')
browser.find_element(By.XPATH,'//*[@id="kw"]')
browser.find_element(By.CSS_SELECTOR,'#kw')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

30Kg载重1小时长续航油电混动无人机技术详解

关于30Kg载重、1小时长续航的油电混动无人机技术&#xff0c;我们可以从以下几个方面进行详细解析&#xff1a; 一、动力系统 1. 油电混合技术 油电混合优势&#xff1a;油电混合无人机结合了燃油发动机的高能量密度和电动机的稳定性和精确控制性&#xff0c;能够在长时间飞…

力扣452-用最少数量的箭引爆气球(Java详细题解)

题目链接&#xff1a;452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最…

PCL-直通滤波

本篇内容&#xff1a; 讲解直通滤波的作用通过pcl实现直通滤波 效果&#xff1a; 1 主要原理 点云数据通常包含x、y、z三个维度的数据&#xff0c;用户指定维度、范围后&#xff0c;直通滤波过滤或保留该范围内的所有点云 假设我指定维度’y’&#xff0c;范围&#xff08;…

华为OD机试真题 - 字符串加解密(Java/Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Java/Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX…

如何让“相信相信的力量”帮你多赚100万

公门洞开纳百川 众心逐梦越千山 号召引领潜力绽 心觉潜意识无间 我们经常听到这句话&#xff1a;相信相信的力量 为什么要相信相信的力量 相信是什么意思 相信的力量又是什么意思 我估计99%的人不知道这句话的底层逻辑是什么 如果你悟透了&#xff0c;你的并且践行了&…

数据结构之稀疏数组

稀疏数组 特殊的数据结构&#xff0c;其特点是大部分元素为同一值。 适用场景 处理方式 以二维数组为例&#xff1a; ● 遍历原始二维数组&#xff0c;查询出不同的值 ● 稀疏数组列数固定为3 ● 第一行记录原始二维数组的行数、列数、不同值的个数 ● 第二行开始记录不同值的…

Python优化算法21——混沌反馈共享和群体协同效应的蝴蝶优化算法(CFSBOA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

C++八股文之语言基础篇

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 思维导图链接&#xff1a;C语言基础 持续更新中…… &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &…

Java中post请求外部接口。其中有应对form-data参数方式处理

一、正常json参数的请求方式 代码片段如下&#xff1a; String result HttpUtil.post(URL_DEFAULT"d38e4357cb96dce5", JSONUtil.parseObj(Dict.create().set("fileName", cityTransitMapParams.getFileName()).set("appKey",cityTransitMapPa…

华为OD机试真题 - 荒岛求生 - 栈Stack(Java/Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Java/Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX…

使用JaCoCo 生成单测覆盖率报告

引入插件 <!-- surefire plugin with spock and junit --> <plugin><groupId>org.codehaus.gmavenplus</groupId><artifactId>gmavenplus-plugin</artifactId><version>1.9.0</version><executions><execution>&l…

使用ROCm和AMD GPU进行机器学习基准测试:复现我们的MLPerf推理提交

Benchmarking Machine Learning using ROCm and AMD GPUs: Reproducing Our MLPerf Inference Submission — ROCm Blogs 简介 衡量新技术的性能是自古以来的一种实验&#xff0c;常常引人入胜&#xff08;例如&#xff0c;我们仍然用马力来比较新电动汽车电机的性能&#xf…

Session 运行机制详解:从创建到销毁

Session 运行机制详解&#xff1a;从创建到销毁 一、Session的创建二、Session的维持三、Session的销毁 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发中&#xff0c;Session机制是实现用户会话跟踪的重要手段。它允许服务器在多…

linux 9系统分区扩容

1.可以看到我的是9.2的系统&#xff0c;系统分区&#xff1a;/dev/mapper/rl-root 83G 8.0G 75G 10% / 2.接下来&#xff0c;我们新增一块新的硬盘&#xff0c;而不是直接对这个硬盘的基础上再扩容。 关机&#xff0c;加30G硬盘&#xff0c;再开机 fdisk -l fdisk /dev/…

29 路由工作原理

路由工作原理 一、理解路由工作原理 &#xff08;一&#xff09;什么是路由 ​ 将数据包从一个网络发送到另一个网络 ​ 需要依靠路由器 ​ 来完成路由器只关心网络的状态&#xff0c;决定最佳路径 &#xff08;二&#xff09;路由器工作原理 ​ 主要完成下列事情&#…

c++算法第一天

温馨提示&#xff1a;本篇文章适合刚开始练算法的小白&#xff0c;大佬若见勿嘲 、 题目 核心提取 1.所有的0移动到数组末尾 2.不能复制数组 解题思路 遇到0,cur,非0则先dest1,再交换&#xff0c;最后cur。 代码编写 温馨提示&#xff1a;这里的指针可以使用下标代替 …

nefu暑假集训4 哈希 个人模板+例题汇总

前言&#xff1a; 什么是哈希&#xff1f;哈希其实是所有字符串操作中&#xff0c;最简单的操作了&#xff08;哈希的过程&#xff0c;其实可以看作对一个串的单向加密过程&#xff0c;并且需要保证所加的密不能高概率重复&#xff08;就像不能让隔壁老王轻易地用它家的钥匙打开…

室分(室内分布系统)主要器件

室分&#xff0c;即室内分布系统&#xff0c;是一种将基站信号引入室内&#xff0c;并对信号进行分布和覆盖的系统。它主要用于解决室内通信信号覆盖不足的问题&#xff0c;提高室内通信质量。室分系统通常由信号源、传输系统、分布系统和天线等部分组成&#xff0c;可以实现对…

java计算机毕设课设—JSP企业快信系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; java计算机毕设课设—JSP企业快信系统(附源码、文章、相关截图、部署视频) 详细的资源获取方式在最下方 JSP企业快信系统是一款专为企业内部及外部通信设计的小型企业通信软件&#xff0c;旨在解决企业在日常沟通中遇到的信息传递不及时、沟通不畅…

火绒安全与国际对手:全面对比与分析

目录 一、产品功能与技术特性对比 火绒安全 360安全卫士 卡巴斯基安全软件 二、市场表现与用户评价 火绒安全 360安全卫士 卡巴斯基安全软件 三、未来挑战与发展 技术与服务对比表格 结语 在数字化时代&#xff0c;网络安全成为了个人和企业面临的主要挑战之一。随着…