Python + Selenium(三)网页元素定位(二)id 定位

了解了开发者工具HTML 结构 后,接下来,就来看看在 Python + Selenium 中如何查找元素了。

查找元素,是 WebDriver 中的核心部分之一。WebDriver提供了八种定位方法,方法如下:

定位方式 方法 说明
id find_element_by_id() 使用 id 属性定位
name find_element_by_name() 使用 name 属性定位
class_name find_element_by_class_name() 使用 class 属性定位
tag_name find_element_by_tag_name() 使用标签名定位
link_text find_element_by_link_text() 使用链接文本定位,只针对 a 标签
partial_link_text find_element_by_partial_link_text() 使用部分链接文本定位
css_selector find_element_by_css_selector() 使用 css 选择器语法定位
xpath find_element_by_xpath() 使用 xpath 语法定位

id、name、class name、tag name 使用的是元素的本身的一些特殊属性标签名;而link_text、partial_link_text使用的是文本定位,并且仅针对于链接地址。这六种定位方式,都是相对简便的定位方式。

但是由于页面操作的多样性,很多时候想操作的元素并非都能找到这么合适的定位方式。所以,需要能够在更加复杂的环境下的定位方式,在 WebDriver 中提供了两种更加高级(复杂)的定位方式css selector、xpath

通过 css selector、xpath 可以使用更加复杂的定位方式,包括使用页面元素层级定位和使用其他任意的属性值等方式来定位。通过这两种方式,可以定位到页面上的任意位置。

id

HTML 规定id 属性在 HTML 文档中必须唯一,id 属性可用于在 JavaScript
或CSS中针对给定 id 来改变 HTML 元素。id是一个类似身份证的概念,唯一性很强。

但是很多时候,id 并不是特别靠谱的存在:

  • HTML 对 id 的唯一性要求没有从语法上限制,这就导致 id 不唯一也不会出问题,导致开发人员会忽略这种唯一性的要求,导致了 id 并不唯一;
  • 对于单选框radio button和复选框check box,一般由 id 相同的一组input的元素组成;
  • 由于前段框架的进化迭代,id 有了很多新的含义,比如根据规则或者随机生成一些数字,导致每次打开同一个页面时 id 都会变化。

以上三种情况,在使用 id 的时候需要注意辨别。

以百度为例:

找到 百度一下 前面的输入框的元素,其属性 id="kw",这就是我们使用 id 定位需要的啦。

为了能看到效果,我们先加上一些简单的操作方法send_keys()、click(),对于这些操作方法,后面会详细讲解

为了操作方便,建议大家在学习过程中,使用 IDLE 练习:

这样可以边输入边查看,并且错了也可以重新输入,也可以在浏览器中直接操作,略过一些步骤。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://baidu.com")
driver.find_element_by_id("kw").send_keys("小满测试")

原文地址:https://www.cnblogs.com/zmll/p/11688511.html

时间: 2024-09-30 15:53:09

Python + Selenium(三)网页元素定位(二)id 定位的相关文章

Python+Selenium练习篇之2-利用ID定位元素

在前面一篇文章,我们介绍了如何摘取页面字段,通过正则进行匹配符合要求的字段.如果感觉有点困难,不能立马理解,没有关系.把字符串摘取放到第一篇,是因为自动化测试脚本,经常要利用字符串操作,字符串切割,查找,匹配等手段,得到新的字符串或字符串数组,然后根据新得到的字符串进行判断用例是否通过. 本篇介绍如何通过元素节点信息ID来定位该元素,使用id来定位元素虽然效率要高于XPath,但是实际测试测项目,能直接通过id定位的元素还是比较少,以下来举例百度首页搜索输入框的id定位. 脚本如下: # cod

python+selenium+chrome网页自动化

python+selenium+chrome网页自动化测试: 1.在pycharm中安装selenium:file-setting-project interpreter 中搜索selenium然后进行安装: 2.下载安装谷歌浏览器驱动:  引用某位同学的安装路径:https://www.cnblogs.com/qiezizi/p/8632058.html  很简单:下载完之后,我们将下载的文件放在 Python 的根目录下就可以了. 3.新建项目和.Py文件:举例:from selenium

使用Selenium对网页元素进行定位的诸种方法

使用Selenium进行自动化操作,首先要做的就是通过webdriver的get()方法打开一个URL链接. 在打开链接,完成页面加载之后,就可以通过Selenium提供的接口,在页面上进行各种操作了,下面我们来了解一下如何在查找元素. 3.1 查找和定位网页元素 在上一篇的示例中,我们就演示了如何通过find_element_by_id()方法,根据元素的id值来定位页面元素. 除了根据元素的id值来查找元素外,Selenium还提供了很多查找元素的方法: 从上图中可以看到,Selenium提

Python selenium —— 父子、兄弟、相邻节点定位方式详解

今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点.定位一个节点的哥哥节点就一筹莫展了,别急,且看博主一步步讲解. 1. 由父节点定位子节点最简单的肯定就是由父节点定位子节点了,我们有很多方法可以定位,下面上个例子: 对以下代码: <html> <body> <div id="A"> <!--父节点

Python Selenium 文件上传(二)

今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python Selenium 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是如果通过saltstack 远程控制执行时,SendKeys就定位不到窗口了. 所以采用这种新的方式来实现文件上传功能,并完美的解决了这个问题. 具体操作步骤如下: 1.下载工具 AutoIt及使用 AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows

Python selenium 三种等待方式详解(必会)

很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

Python selenium 三种等待方式解读

1. 强制等待 第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: ? 1 2 3 4 5 6 7 8 9 10 11 # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get('https://huilansam

python+selenium:iframe框架中动态id如何切换

方法一:通过索引,id,name,WebElement定位 from selenium import webdriverdriver = webdriver.Firefox()driver.switch_to.frame(0) # 1.用frame的index来定位,第一个是0# driver.switch_to.frame("frame1") # 2.用id来定位# driver.switch_to.frame("myframe") # 3.用name来定位# d

python selenium操作表格式元素实例

很多时候,网页上的布局都是表格形式的,如出下面这样的 这种网页类型在自动化中比较头痛,需要很多判断,下面就举个例子,这里以深圳出入境网页为例,http://yysl.sz3e.com/wsyysq/select_sldw_zbs.jsp 比如我们需要点击某个星期六的任意一个可以预约的时段,该怎么写呢. 首先我们要分析,这也是写程序的第一步,将手工操作进行逻辑提取,再形成程序 1.先判断列表中的日期,找到星期六的列 2.再从找到的列中判断可预约的时间点 基本思路就是这样,来看第一点,怎么提取表格式

Python selenium 三种等待方式详解

1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get('https://www.xuehu365.com') sleep(3) # 强制等待3秒再