爬虫selenium获取元素定位方法总结(动态获取元素)

目录

元素

查看元素信息

元素定位

通过元素id定位

通过元素name定位

通过xpath表达式定位

绝对路径

相对路径

通过完整超链接定位

通过部分链接定位

通过标签定位

通过类名进行定位

通过css选择器进行定位

id选择器

class选择器

标签选择器

属性选择器

定位带空格的复合class属性

selenium 4.0以后版本用法


元素

要想操作一个元素,首先应该识别这个元素。人有各种的特征(属性),可以通过其特征找到人,如通过身份证号、姓名、家庭住址。同理,界面的某个元素会有各种的特征(属性),可以通过这个属性找到这对象。

例如:

driver.find_element(By.CSS_SELECTOR, 'img[title="点击图片重新获取验证码"]')

该代码寻找属性标识着为 “点击图片重新获取验证码图” 的图片验证码

元素:由标签头 + 标签尾 + 标签头和标签尾包括的文本内容

元素定位最终就是通过元素的信息或者元素的层级结构来进行元素定位

查看元素信息

选中元素,右键点击“检查”,即可查看到该控件的所有属性 

元素定位

selenium提供了常用的8种方法:

定位一个元素

定位多个元素

  • 通过元素id定位
    • find_element_by_id

    • find_elements_by_id

  • 通过元素name定位

    • find_element_by_name

    • find_elements_by_name

  • 通过xpath表达式定位

    • find_element_by_xpath

    • find_elements_by_xpath

  • 通过完整超链接定位

    • find_element_by_link_text

    • find_elements_by_link_text

  • 通过部分链接定位

    • find_element_by_partial_link_text

    • find_elements_by_partial_link_text

  • 通过标签定位

    • find_element_by_tag_name

    • find_elements_by_tag_name

  • 通过类名进行定位

    • find_element_by_class_name

    • find_elements_by_class_name

  • 通过css选择器进行定位

    • find_element_by_css_selector

    • find_elements_by_css_selector

通过元素id定位

find_element_by_id("kw")?

通过元素name定位

find_element_by_name("wd")?

通过xpath表达式定位

Xpath是一种在XMLHTML文档中查找信息的语言,通过Xpath路径来定位元素的时候也是分绝对路径和相对路径。

绝对路径

鼠标单机右键-Copy-Copy full XPath即可获取其XPath绝对路径

/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input

selenium通过xpath定位语句: 

find_element_by_xpath('/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input')

相对路径

鼠标单机右键-Copy-Copy XPath即可获取其XPath相对路径

//*[@id="kw"]

selenium通过xpath定位语句: 

find_element_by_xpath('//*[@id="kw"]')

相对路径的xpath定位表达式更加简洁,但是偶然会出现错误的寻址,但如果可以推荐使用相对路径的xpath表达式。

通过完整超链接定位

find_element_by_link_text('文库')

通过部分链接定位

find_element_by_partial_link_text('库')

通过标签定位

HTML是通过tag来定义一类功能的,比如input是输入,table是表格,tbody是表格主体等。每个元素其实就是一个tag,由于一个tag用来定义一类功能,一个网页往往有很多同类tag,所以很难通过tag去区分不同的元素。

find_element_by_tag_name('input')?

通过类名进行定位

find_element_by_class_name('s_ipt')

如果class的值中有空格,则需要借助CSS选择器。

通过css选择器进行定位

Selenium官网当中是更加推荐Css Selector()方法来进行页面元素的定位的Css定位可以通过id选择器、class选择器、标签选择器和属性选择器。

id选择器

通过 # 来定义,通过元素的id属性来定位

find_element_by_css_selector("#kw")?

class选择器

通过 .来定义,通过元素的class属性来定位

find_element_by_css_selector(".s_ipt")?

标签选择器

通过标签的名字来定位元素

find_element_by_css_selector("input")?

属性选择器

find_element_by_css_selector('[id="kw"]')?
find_element_by_css_selector('input[id="kw"]')?

定位带空格的复合class属性

以百度上方栏目元素为例,其class属性带有空格。

class="s-top-left-new?s-isindex-wrap"

直接通过class属性定位是会报错的,需要通过css selector按class属性定位。

find_element_by_css_selector('[class="s-top-left-new?s-isindex-wrap"]')

selenium 4.0以后版本用法

from?selenium.webdriver.common.by?import?By
element?=?web.find_element(By.ID,'kw')
element?=?web.find_element(By.NAME,'wd')
element?=?web.find_element(By.CLASS_NAME,'s_ipt')
element?=?web.find_element(By.TAG_NAME,'input')
element?=?web.find_element(By.LINK_TEXT,'新闻')
element?=?web.find_element(By.PARTIAL_LINK_TEXT,'闻')
element?=?web.find_element(By.XPATH,'//*[@id="kw"]')
element?=?web.find_element(By.CSS_SELECTOR,'#kw')
element?=?web.find_element(By.CSS_SELECTOR,'[id="kw"]')
element?=?web.find_element(By.CSS_SELECTOR,'input[id="kw"]')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CPU、MCU、MPU、SOC、SOCPC、概念解释之在嵌入式领域常听到的名词含义

CPU、MCU、MPU、SOC等几个在嵌入式领域学习过程中会涉及到的几个名词。我们来学习一下,资料从网上搜集的,有错的地方可以指出。。。 CPU、MCU、MPU、SOC、SOCPC、 1. CPU2. MPU3.MCUMPU和MCU的区别:4.SOC5. SoPC 1. CPU CPU,即中…

HBase--技术文档--基本概念--《快速扫盲》

官网 Apache HBase – Apache HBase™ Home 阿里云hbase 云数据库HBase_大数据存储_订单风控_数据库-阿里云 云数据库 HBase-阿里云帮助中心 基本概念 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。它基于Hadoop,采用列式存储方式,可…

数据库第十七课-------ETL任务调度系统的安装和使用

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

如何基于自己训练的Yolov5权重,结合DeepSort实现目标跟踪

网上有很多相关不错的操作demo,但自己在训练过程仍然遇到不少疑惑。因此,我这总结一下操作过程中所解决的问题。 1、deepsort的训练集是否必须基于逐帧视频? 我经过尝试,发现非连续性的图像仍可以作为训练集。一个实例&#xff0…

本地组策略编辑器找不到怎么解决?| 解决windows home 版本隐藏本地组策略编辑器的问题 | 简单的介绍本地组策略编辑器

一般的 Windows 非家庭系统中,本地组策略编辑器不会被隐藏,但在某些特定情况下,可能会受到限制或不可用。如果你无法访问本地组策略编辑器,并且认为应该可以访问,请确保你拥有管理员权限,并检查是否有任何系…

Qt应用开发(基础篇)——对话框窗口 QDialog

一、前言 QDialog类继承于QWidget,是Qt基于对话框窗口(消息窗口QMessageBox、颜色选择窗口QColorDialog、文件选择窗口QFileDialog等)的基类。 QDialog窗口是顶级的窗口,一般情况下,用来当做用户短期任务(确认、输入、选择)或者和用户交流(提…

文件上传漏洞之条件竞争

这里拿upload-labs的第18关做演示 首先先看代码 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_…

MyBatis-Plus框架技术总结

MybatisPlus 1、概述 MybatisPlus是一款Mybatis增强工具,用于简化开发,提高效率。 它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 ​ 官网: https://mp.baomidou.com/ 2、快速入门 2.0、准备工作 ①准…

怎样快速选择正确的可视化图表?

数据可视化的图表类型十分丰富,好的图表可以有效、清晰地呈现数据的信息。对于用户而言,选择正确的图表是十分关键的,不仅可以达到“一图胜千言”的效果,而且会直接影响分析的结果。 用户选择正确的数据可视化图表前,…

嵌入式学习笔记——ARM的编程模式和7种工作模式

ARM提供的指令集 ARM态-ARM指令集(32-bit) Thumb态-Thumb指令集(16-bit) Thumb2态-Thumb2指令集(16 & 32 bit) Thumb指令集是对ARM指令集的一个子集重新编码得到的,指令长度为16位。通常在…

2023年四款热门护眼台灯推荐/测评/排行/选购指南-内含明基/书客/飞利浦

灯具可以说是我们日常生活中使用很频繁的工具了,我们每天都离不开它给我们带来的光亮。当然,现在灯具也有很多种类可以挑选,今天主要带来的就是护眼台灯的选购问题! 护眼台灯品牌那么多,怎么选到适合自己的台灯&#x…

Linux下的系统编程——vim/gcc编辑(二)

前言: 在Linux操作系统之中有很多使用的工具,我们可以用vim来进行程序的编写,然后用gcc来生成可执行文件,最终运行程序。下面就让我们一起了解一下vim和gcc吧 目录 一、vim编辑 1.vim的三种工作模式 2.基本操作之跳转字符 &a…

always for

怎么改写 reg test[3:0]; always (posedge clk) begin//int i0;if(rst) begintest[0] <0;test[1] <0;test[2] <0;test[3] <0;endelse beginif(test[0]0) beginif(wea )test[0] < 1;endelse if(test[1]0) begin //优先级if(wea )test[1] < 1;endelse if(te…

【android12-linux-5.1】【ST芯片】HAL移植后没调起来

ST传感器芯片HAL按官方文档移植后&#xff0c;测试一直掉不起来&#xff0c;加的日志没出来。经过分析&#xff0c;是系统自带了一个HAL&#xff0c;影响的。 按照官方文档&#xff0c;移植HAL后&#xff0c;在/device/<vendor\>/<board\>/device.mk*路径增加PROD…

线性代数的学习和整理12: 矩阵与行列式,计算上的差别对比

目录 1 行列式和矩阵的比较 2 简单总结矩阵与行列式的不同 3 加减乘除的不同 3.1 加法不同 3.2 减法不同 3.3 标量乘法/数乘 3.3.1 标准的数乘对比 3.3.2 数乘的扩展 3.4 乘法 4 初等线性变换的不同 4.1 对矩阵进行线性变换 4.2 对行列式进行线性变换 1 行列式和…

CUDA小白 - NPP(2) -图像处理-算数和逻辑操作

cuda小白 原文链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xff0c…

docker部署前端项目保姆级教程

本地启动docker&#xff08;有不会启动的吗&#xff1f;下载docker&#xff08;小海豚&#xff09;双击起来就行&#xff09; 准备阿里云账号&#xff08;免费&#xff09; 没有就去注册一个&#xff0c;记住密码后面要用到 官网地址&#xff1a;阿里云登录 - 欢迎登录阿里云…

字符设备驱动(内核态用户态内存交互)

前言 内核驱动&#xff1a;运行在内核态的动态模块&#xff0c;遵循内核模块框架接口&#xff0c;更倾向于插件。 应用程序&#xff1a;运行在用户态的进程。 应用程序与内核驱动交互通过既定接口&#xff0c;内核态和用户态访问依然遵循内核既定接口。 环境搭建 系统&#…

华为云Stack的学习(三)

四、华为云Stack公共组件 1.华为云Stack公共负载均衡方案介绍 1.1 LVS原理 LVS是四层负载均衡&#xff0c;建立在OSI模型的传输层之上&#xff0c;所以效率非常高。 LVS有两种转发模式&#xff1a; NAT模式的转发主要通过修改IP地址&#xff08;位于OSI模型的第三层网络层&…

Linux安装Docker

文章目录 先决条件开始安装1.卸载旧版本2.安装依赖3.切换数据源4.安装Docker5.启动服务6.查看版本7.查看端口8.测试拉取镜像 同系列文章 先决条件 Linux内核版本高于3.1 开始安装 1.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \doc…