爬虫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"]')

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

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

相关文章

蓝帽杯半决赛2022

手机取证_1 iPhone手机的iBoot固件版本号:(答案参考格式:iBoot-1.1.1) 直接通过盘古石取证 打开 取证大师和火眼不知道为什么都无法提取这个 手机取证_2 该手机制作完备份UTC8的时间(非提取时间):(答案…

技术的巅峰演进:深入解析算力网络的多层次技术设计

在数字化时代的浪潮中,网络技术正以前所未有的速度演进,而算力网络作为其中的一颗明星,以其多层次的技术设计引领着未来的网络构架。本文将带您深入探索算力网络独特的技术之旅,从底层协议到分布式控制,为您呈现这一创…

opencv进阶19-基于opencv 决策树cv::ml::DTrees 实现demo示例

opencv 中创建决策树 cv::ml::DTrees类表示单个决策树或决策树集合,它是RTrees和 Boost的基类。 CART是二叉树,可用于分类或回归。对于分类,每个叶子节点都 标有类标签,多个叶子节点可能具有相同的标签。对于回归,每…

cuml机器学习GPU库 sklearn升级版AutoDL使用

CUML库 最近在做机器学习任务的时候发现我自己的数据集太大,直接用sklearn 跑起来时间很长,然后问GPT得知了有CUML库,后来去研究了一下,发现这个库只支持linux系统,从官网直接获取下载命令基本上也实现不了最后&#…

outlook等客户端报错:-ERR Login fail. Please using weixin token to login

使用outlook配置腾讯邮箱后,无法收取邮件,点击接收/发送所有文件夹, 提示报错: 任务“testqq.com - 正在接收”报告了错误(0x800CCC92):“电子邮件服务器拒绝您登录。请在“帐户设置”中验证此帐户的用户名及密码。 响应服务器:…

详细介绍线程池的使用原理、参数介绍、优点、常见构造方法、使用案例、模拟实现

前言 创建和销毁一个线程时,这点损耗是微不足道的,但是当需要频繁的创建和销毁多个线程时,这个成本是不可忽视的,于是就有大佬创建了线程池,借助线程池来减少其中的成本。 目录 前言 一、线程池的使用原理 二、线程…

LVS集群 (NET模式搭建)

目录 一、集群概述 一、负载均衡技术类型 二、负载均衡实现方式 二、LVS集群结构 一、三层结构 二、架构对象 三、LVS工作模式 四、LVS负载均衡算法 一、静态负载均衡 二、动态负载均衡 五、ipvsadm命令详解 六、搭建实验流程 一、首先打开三台虚拟机 二、…

【云计算】Docker特别版——前端一篇学会

docker学习 文章目录 一、下载安装docker(一)Windows桌面应用安装(二)Linux命令安装 二、windows注册登录docker三、Docker的常规操作(一)、基本的 Docker 命令(二)、镜像操作(三)、容器的配置(四)、登录远程仓库 四、镜像管理(一…

【FAQ】H.265视频无插件流媒体播放器EasyPlayer.js播放webrtc断流重连的异常修复

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8&#…

Python功能制作之简单的3D特效

需要导入的库: pygame: 这是一个游戏开发库,用于创建多媒体应用程序,提供了处理图形、声音和输入的功能。 from pygame.locals import *: 导入pygame库中的常量和函数,用于处理事件和输入。 OpenGL.GL: 这是OpenGL的Python绑定…

如何声明一个全局变量?有什么注意事项?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 声明全局变量⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚…

聊聊智慧城市的发展

目录 1.智慧城市应该是什么样子 2.智慧城市的实现方案 3.智慧城市会给人们造成的影响 1.智慧城市应该是什么样子 智慧城市是一种基于信息和通信技术的先进城市管理模式,旨在提高城市的运行效率、居民生活质量和可持续发展。智慧城市整合了各种智能设备、传感器、…

二叉树搜索

✅<1>主页&#xff1a;我的代码爱吃辣&#x1f4c3;<2>知识讲解&#xff1a;数据结构——二叉搜索树☂️<3>开发环境 &#xff1a;Visual Studio 2022&#x1f4ac;<4>前言&#xff1a;在之前的我们已经学过了普通二叉树&#xff0c;了解了基本的二叉树…

[Go版]算法通关村第十四关青铜——原来这就是堆

目录 堆的概念和特征父子关系&#xff1a;(i-1)/2 堆的构造过程自底向上堆化&#xff08;Bottom-up Heapify&#xff09;举例 自顶向下堆化&#xff08;Top-down Heapify&#xff09; 插入操作举例 删除操作举例 堆结构的价值口诀 堆的概念和特征 堆是一个很大的概念&#xff0…

ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 开题报告内容&#xff1a;&#xff08;研究现状、目的意义&#xff1b;基本内容、研究方法、参考文献等。&#xff09; 研究现状 国外…

driver‘s license exam 4

driver‘s license exam 1_spencer_tseng的博客-CSDN博客 driver‘s license exam 2_spencer_tseng的博客-CSDN博客 driver‘s license exam 3_spencer_tseng的博客-CSDN博客 driver‘s license exam 4_spencer_tseng的博客-CSDN博客 car indicator light_spencer_tseng的博…

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全&#xff0c;相对线程安全的Vector,执行效率高。此外&#xff0c;ArrayList时实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构&#xff0c;对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedLis…

ubuntu上使用osg3.2+osgearth2.9

一、介绍 在ubuntu上使用osgearth加载三维数字地球&#xff0c;首先要有osg和osgearth的库&#xff0c;这些可以直接使用apt-get下载安装&#xff0c;但是版本有些老&#xff0c;如果需要新版本的就需要自己编译。 #查看现有版本 sudo apt-cache madison openscenegraph #安装…

C#实现简单TCP服务器和客户端网络编程

在C#中进行网络编程涉及许多类和命名空间&#xff0c;用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间&#xff1a; System.Net 命名空间&#xff1a;这个命名空间提供了大部分网络编程所需的类&#xff0c;包括&#xff1a; IPAddress&#xff1a;用于…

2023年高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …