五、Selenium操作指南(一)

news2024/11/26 12:00:02

文章目录

  • 一、基本用法
    • (一)初始化浏览器对象
    • (二)访问页面
    • (三)设置浏览器大小
    • (四)刷新页面
    • (五)前进后退
  • 二、获取页面基础属性
  • 三、定位页面元素
    • (一)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/2092546.html

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

相关文章

【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态

【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态 1. 读取 P1、P2 端口 主从模式 / 传输速率2. 读取 P1、P2 端口 Link Status3. 读取 P1、P2 端口 Duplex 全双工/半双工模式4. 读取 P1、P2 链路信号SQI质量5. 完整代码…

基于单片机的肺活量检测仪设计

本设计主要对其中的一种测量方法和原理进行介绍与运用&#xff0c;设计了一款基于STC12C5A60S2单片机的肺活量检测仪&#xff0c;包括供电模块、气流检测模块、按键模块、显示模块、语音输出模块和蓝牙模块&#xff0c;实现对肺活量的数值检测&#xff0c;并对数据进行语音播报…

linux固定ip

背景 VMware&#xff0c;centos7 查询 网关 linux指执行 ip addr 命令 拿到自动分配的ip : 192.168.150.102 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ 执行: cd /etc/sysconfig/network-scripts/ 进入到network-scripts文件中 执行: vi ifcfg-ens33 编辑ifc…

PPT到PDF转换器:一个功能强大的Python GUI应用(unzip,convert,replace,merge)

在当今的数字时代,文档格式转换已成为一项常见需求。特别是将PowerPoint演示文稿转换为PDF格式,这不仅可以确保文档的一致性,还能方便分享和打印。今天,我们将深入探讨一个使用Python开发的强大GUI应用程序,它不仅可以将PPT转换为PDF,还具备文本替换、PDF处理和文件合并等多项功…

TDesign 微信小程序组件库配置

文章目录 1.安装 npm 包2. 构建 npm3. 构建完成后即可使用 npm 包。4.修改 app.json5.修改 tsconfig.json6.使用组件 1.安装 npm 包 在小程序 package.json 所在的目录中执行命令安装 npm 包&#xff1a; npm install结果报错 PS C:\WeChatProjects\miniprogram-1> npm i…

七、库存管理——调拨、预留业务

1、库存管理业务总览 2、转储过账和库存转移 3、转储过账 3.1 库存状态到库存状态&#xff08;类型较多&#xff09; 3.1.1 从质检库存转移到非限制使用库存 转储模式&#xff1a;事务类型A08&#xff08;转移过账&#xff09;凭证类型R10&#xff08;其他&#xff09;移动类…

Having trouble using OpenAI API

题意&#xff1a;"使用OpenAI API遇到困难" 问题背景&#xff1a; I am having trouble with this code. I want to implement AI using OpenAI API in my React.js project but I cannot seem to get what the issue is. I ask it a question in the search bar in…

java 教程-我的第一个JAVA程序

Java视频教程 我的第一个JAVA程序 以下我们通过一个简单的实例来展示Java编程&#xff0c;本实例输出"编程字典&#xff0c;Java教程&#xff01;"&#xff0c;这也是所有语言入门的第一个实例程序&#xff1a; packagecodingdict.com; publicclassHelloWorld{ publi…

REGTR: End-to-end Point Cloud Correspondences with Transformers 论文解读

目录 一、导言 二、先导知识 1、3DRegNet 2、Kabsch-Umeyama算法 3、InfoNCE损失函数 三、相关工作 1、基于对应关系的配准 2、全局配准工作 3、过滤问题 4、Transformer 四、REGTR网络 1、降采样和特征提取 2、Transformer 交叉编码器 Transformer为什么要用FF…

MySQL高阶练习题2-没有广告的剧集

目录 题目 准备数据 分析数据 实现代码 总结 题目 找出所有没有广告出现过的剧集。 返回结果 无顺序要求 。 准备数据 create database db; use db;Create table If Not Exists Playback(session_id int,customer_id int,start_time int,end_time int); Create table I…

数据结构:(LeetCode 965)相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

「草莓」即将上线,OpenAI新旗舰大模型曝光,代号「猎户座」

本月初,OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片,勾起了大家强烈的好奇心。 「四个红草莓,其中还有一个未成熟的青色草莓,这不妥妥地是在说下一代 AI 大模型 GPT-5 要来了吗?」奥特曼在回应网友时也在暗示,惊喜马上就来。 据科技媒体 The Information 报…

前胡基因组与伞形科香豆素的进化-文献精读42

The gradual establishment of complex coumarin biosynthetic pathway in Apiaceae 伞形科中复杂香豆素生物合成途径的逐步建立 羌活基因组--文献精读-36 摘要&#xff1a;复杂香豆素&#xff08;CCs&#xff09;是伞形科植物中的特征性代谢产物&#xff0c;具有重要的药用价…

JAVA:文字写入图片、图片插入图片

一、前言 在实际应用中&#xff0c;需要通过Java将目标信息写在图片上&#xff0c;生成小卡片。 二、实现 1.定义一个工具类&#xff0c;代码如下&#xff1a; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.Fil…

C++(1)基础语法

C(1)之基础语法 Author: Once Day Date: 2024年8月29日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 参考文…

使用控制台与键盘进行输入输出

1、控制台简介与初始化 计算机在上电启动后&#xff0c;显示器被默认配置成80x25列的文本显示模式 。其使用从0xb8000开始&#xff0c;一共32KB的显存用于显示。如要在屏幕上指定位置显示特定的字符&#xff0c;则只需找到该位置对应的显存地址&#xff0c;写入2字节的数据&am…

ctfshow之web58~web71

目录 web58 思路一&#xff1a; 思路二&#xff1a; 思路三&#xff1a; web59~web65 web66~web67 web68~web70 web71 web58 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } PHP eval() 函数介绍 定义和用法 eval() 函数把字符串按…

【Sceneform-EQR】通过filament(gltfio)加载gltf模型动画(Filament使用Animator)

Sceneform-EQR 简介 Sceneform-EQR是EQ基于sceneform&#xff08;filament&#xff09;扩展的一个用于安卓端的三维渲染器。 相关链接 Git仓库 Sceneform-EQR 码云 EQ-Renderer的示例工程 EQ-R相关文档 文档目录CSDN专栏 实现通过filament加载gltf模型动画 运行示例 …

U盘无法访问?揭秘原因与高效恢复策略

一、U盘困境深度剖析 在日常的数字生活中&#xff0c;U盘作为我们存储和传输数据的重要工具&#xff0c;其重要性不言而喻。然而&#xff0c;当U盘突然显示“无法访问”时&#xff0c;这种突如其来的困境往往让人措手不及。U盘无法访问的现象可能由多种原因造成&#xff0c;包…

Question mutiple pdf‘s using openai, pinecone, langchain

题意&#xff1a;使用 OpenAI、Pinecone 和 LangChain 对多个 PDF 文件进行提问。 问题背景&#xff1a; I am trying to ask questions against a multiple pdf using pinecone and openAI but I dont know how to. 我正在尝试使用 Pinecone 和 OpenAI 对多个 PDF 文件进行提…