定位页面元素

环境准备

安装fitepath

火狐浏览器-工具-附加组件-搜索firepath进行安装

 

安装firebug插件

火狐浏览器-工具-附加组件-搜索firebug进行安装

firebug定位

打开firebug点击查看页面元素按钮,再点击想要查看的元素,就可以定位到页面元素内容

获取单个页面元素

find_element_by_id

find_element_by_name

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

使用id定位

#coding:utf-8
from selenium import webdriver
import time

driver=webdriver.Firefox()  #启动火狐浏览器
driver.get("http://www.baidu.com") #打开百度
driver.find_element_by_id(‘kw‘).send_keys("ceshi") #通过id定位搜索框然后输入内容
driver.find_element_by_id(‘su‘).click()  #通过id定位百度一下按钮,并点击该按钮
time.sleep(3)
driver.quit()

使用name定位

如果name属性是唯一的,可以通过那么属性定位

driver.find_element_by_name(username).send_keys("name") #通过name定位输入框

使用class_name定位

class_name 不容易定位到元素

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

driver.find_element_by_class_name(s_ipt).send_keys("ceshi") #通过class_name定位搜索框

使用link_text定位

链接定位

driver.find_element_by_link_text(糯米)

使用partial_link_text定位

模糊链接定位

<a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>

driver.find_element_by_partial_link_text(‘地‘)

使用tag_name定位

指标签名称定位,因为相同标签很多,一般不用标签定位,(可以用来定位一组元素,看定位一组元素里面的实例),

使用xpath定位

通过属性定位

#coding:utf-8
#第一步导入selenium里的webdriver模块
from selenium import webdriver   
#第二步 启动浏览器
driver=webdriver.Firefox()  #启动火狐浏览器
#第三步 打开url
driver.get("http://www.baidu.com")
driver.find_element_by_xpath("//*[@id=‘kw‘]")

通过标签加属性定位

driver.find_element_by_xpath("//input[@id=‘kw‘]")

driver.find_element_by_xpath("//input[@name=‘wd‘]")

driver.find_element_by_xpath("//*[@id=‘kw‘]")  #*代表不用指定标签

层级

如果一个元素属性不是很明显,我们可以往上找(父元素)

#通过父亲定位input标签

driver.find_element_by_xpath(‘//span[@class="bg s_btn_wr"]/input‘)

#通过爷爷定位inpu

driver.find_element_by_xpath(‘//form[@id="form"]/span[2]/input‘)

使用css定位

定位百度搜索框

通过class属性定位

用.表示class属性

driver.find_element_by_css_selector(".s_ipt")

通过id属性定位

用#号表示id属性,如:#kw

driver.find_element_by_css_selector("#kw")

通过其它属性定位

driver.find_element_by_css_selector("[autocomplete=‘off‘]")

driver.find_element_by_css_selector("[name=‘wd‘]")

通过标签定位

driver.find_element_by_css_selector("input#kw") #标签与id属性

driver.find_element_by_css_selector("input.s_ipt")#标签与class属性

driver.find_element_by_css_selector("input[id=kw]") #标签与其它属性

使用By定位元素

find_element()方法只用于定位元素。它需要传入两个参数,第一参数是定位的类型,由By提供;第二个参数是定位的具体方式。在使用By之前需要将By类导入

find_element(By.ID,kw)

find_element(By.NAME,wd)

find_element(By.NAME,wd)

find_element(By.CLASS_NAME,‘s_ipt‘)

find_element(By.TAG_NAME,‘input‘)

find_element(By.LINK_TEXT,‘新闻‘)

find_element(By.PARTIAL_LINK_TEXT,‘新‘)

find_element(By.XPATH,"//*[@id=‘kw‘]")

find_element(By.CSS_SELECTOR,"#kw")

实例

#coding=utf-8

from selenium import webdriver
from selenium.webdriver.common.by import By #导入By类
driver=webdriver.Firefox()
driver.get(‘https://www.baidu.com/‘)
driver.find_element(By.ID,‘kw‘).send_keys(u‘测试‘) #通过By id定位百度的输入框,然后输入内容

定位一组元素

获取批量页面元素

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

html文件内容:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

<form>

<input type="checkbox" name="fruit" value="berry"/>草莓</input>

<br />

<input type="checkbox" name="fruit" value="watermelon" />西瓜</input>

<br />

<input type="checkbox" name="fruit" value="orange"/>橘子</input>

</form>

</body>

</html>

脚本:

1.通过tag_name定位input元素

#coding=utf-8

import time
from selenium import webdriver
driver=webdriver.Firefox()
driver.get(r‘C:\Users\yueli\Desktop\a.html‘)
#选择页面上所有的tag name为input的元素
inputs=driver.find_elements_by_tag_name(‘input‘)
#然后从中过滤type为checkbox的元素,单机勾选
for i in inputs:
    if i.get_attribute(‘type‘)==‘checkbox‘:
        i.click()
        time.sleep(3)
driver.quit()

备注:get_attribute()方法获取元素的type的属性值

2.通过xpath定位input元素

#coding=utf-8

import time
from selenium import webdriver
driver=webdriver.Firefox()
driver.get(r‘C:\Users\yueli\Desktop\a.html‘)
#通过xpath找到type=checkbox的元素
inputs=driver.find_elements_by_xpath("//input[@type=‘checkbox‘]")

for i in inputs:
    i.click()
    time.sleep(2)
print len(inputs)
#把页面上最后1个checkbox的钩给去掉
driver.find_elements_by_xpath("//input[@type=‘checkbox‘]").pop().click()
time.sleep(2)
driver.quit()

3.通过css定位input元素

#coding=utf-8

import time
from selenium import webdriver
driver=webdriver.Firefox()
driver.get(r‘C:\Users\yueli\Desktop\a.html‘)
#通过xpath找到type=checkbox的元素
inputs=driver.find_elements_by_css_selector("input[type=checkbox]")

for i in inputs:
    i.click()
time.sleep(2)
print len(inputs)
#把页面上最后1个checkbox的钩给去掉
driver.find_elements_by_css_selector("input[type=checkbox]").pop().click()
time.sleep(2)
driver.quit()

Xpath和css方法 循环式不用加判断方法,因为定位元素是已经做了判断

pop()方法用于获取列表中一个元素,默认为最后一个元素

原文地址:https://www.cnblogs.com/yueli85627/p/9141076.html

时间: 2024-10-04 02:14:12

定位页面元素的相关文章

请教:日期选择框,selenium如何定位页面元素

请教,下面的html,如何定位页面元素(年.月),试了好多方法都不可以 <div class="inputRow"> <span>购车日期</span> <input id="buyDate" type="hidden" name="buyDate" value="2013-12"> <span id="year__jQSelect0"

定位页面元素之xpath详解以及定位不到测试元素的常见问题

一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是: 1. 找到该按钮的特征,例如按钮的文字是 submit: 2. 用XPath定位,可以这样写://button[@value='submit'].(注意是单引号!!) name:和id一致 ClassName:对某些具有相同类的元素一网打尽的好方法 link text 和 partial lin

使用CSS选择器定位页面元素

摘录:http://blog.csdn.net/defectfinder/article/details/51734690 CSS选择器也是一个非常好用的定位元素的方法,甚至比Xpath强大.在自动化里我们用CSS选择器来定位页面元素一定要牢记一个准则:唯一定位,通常使用CSS选择器修改样式时会尽量多的选择元素,但是,在自动化里,必须要唯一定位到元素,否则自动化很可能因为找不到页面元素而失败.CSS选择器有很多,像标签选择器.类选择器.ID选择器.关系选择器.伪类选择器.分组选择器等等,但是只需

selenium IDE(五)selenium 命令之定位页面元素

定位页面元素 对于很多selenium命令,target域是必须的.Target在web页面范围内识别UI元素,它使用locatorType=location的格式.在很多情况下,locatorType可以省略,下面举例方式来描述各种类型的locatorType. 假如,有如下一段HTML代码: html> <body> <form id= "loginForm" > <input name= "username" type= &

webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载

原文:https://my.oschina.net/u/2344787/blog/400507?p={{page}} 引言: 在使用webdriver的get方法打开页面时,可能页面需要加载的元素较多导致加载时间很长,而时间过长会导致后面的操作无法进行,甚至直接报错:所以在页面加载到一定时间,实际需要定位的元素很大可能上已经加载出来时,需要停止页面的加载,进而进行下面的操作: 例如:get 汽车之家页面时会等待很长时间,其实页面基本元素都已加载,可进行后续操作 可以通过set_page_load

By.Xpath快速定位页面元素常用方法

先看一看xpath的语法 我们将在下面的例子中使用这个 XML 文档. <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book&g

Python selenium根据class定位页面元素

在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: 1 <div class="sui-tips s-isindex-wrap sui-tips-exceedtipnews" style="display: none; width: auto;"><div class="sui-tips-arrow"

Java+selenium之WebDriver定位页面元素(二)

Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法: 单个对象的定位方法,多个对象的定位方法和层级定位 1. 定位单个元素 1 // 对于元素的属性包含 id 的情况适用,推荐使用 2 WebElement we = drive.findElement(By.id("id")); 3 // 对于元素的属性包含 name 的情况适用,推荐使用 4 WebElement we = drive.findElement(By.name("name&quo

爬虫项目案例讲解 案例二:定位、爬虫、定位页面元素、分别定位、简单处理抓取数据(有总结)

1.scrapy shell [要爬取的网址]他可以很直观的反馈给你要定位的元素是否可以定位到2.打开后然后再把:response.xpath("//*[@id=\"ml_001\"]/table/tbody/tr[1]/td[1]/a/text()").extract():语句写入,看如果可以返回值说明可以定位到yield 作用:和return类似 总体过程如下:1.cd part6(转到某个project下)scrapy startproject [名字1]cd