文章目录
1.通过id定位元素 driver.find_element_by_id("id_vaule")
2.通过name定位元素: driver.find_element_by_name("name_vaule")
3.通过class_name定位元素: driver.find_element_by_class_name("class_name")
4.通过tag_name定位元素: driver.find_element_by_tag_name("tag_name_vaule")
5.通过link定位: driver.find_element_by_link_text("text_vaule") 或:driver.find_element_by_partial_link_text("text_vaule")
6.通过xpath定位元素: driver.find_element_by_xpath("xpath_syntax")
7.通过css定位元素: driver.find_element_by_css_selector(“css_syntax”)
一、基本元素定位API使用
例子:百度首页搜索框
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
先调用firefox打开首页:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
1.通过id定位元素
driver.find_element_by_id('kw').send_keys('python') --根据id找到搜索框,并搜索python
2.通过name定位元素:
driver.find_element_by_name('wd').send_keys('java')
3.通过class_name(样式名)定位元素: (要有class属性)
driver.find_element_by_class_name('s_ipt').send_keys('java')
4.通过tag_name(标签名)定位元素:
driver.find_element_by_tag_name('input').send_keys('java') (元素不唯一,所以会报错)
备注:tag_name应该是所有定位方式中最不靠谱的一种,因为在一个页面上相 同tag_name的元素极其容易出现
5.通过link定位: (链接文本才可以,普通文本不行)
5.1 link_text
例子:百度首页新闻二字:
<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>
driver.find_element_by_link_text("新闻").click --点击新闻这个超链接
if '新闻' in driver.tittle:
print('页面打开成功')
5.2 partial_link_text
当一个文字很长的链接时,我们可以只取其中的部分,只要取的部分可 以唯一标识元素
例子:百度首页hao123
<a href="https://www.hao123.com" target="_blank" class="mnav">hao123</a>
driver.find_element_by_partial_link_text("hao").click --点击hao123这个超链接
6.通过xpath定位元素
XPATH是什么?
XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对 元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表 示为XHTML文档。
xml文件的格式是各种标签组成,普通xml文件的标签名是由程序员自己定义的
查找xml文件中标签的位置的方式:xpath
html是一种特殊的xml,html文件里面的标签都是由官方定义好的,而且能够被浏览器直接识别,并能显示其效果
6.1、通过绝对路径定位
绝对路径的开头是一个斜线(/),从网页的根节点html开始,逐层去查找 需要定位的元素。
例子:百度首页搜索框
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/div/ form/span[1]/input')
备注:当同一层次有多个相同的标签时,使用下标区分,下标从1开始
6.2、通过相对路径定位
相对路径的开头是两个斜线(//),表示文件中所有符合模式的标签都会被 选出来,即使是处于树中不同的层级也会被选出来。
6.3 、通过元素索引定位
如果同一级有相同的标签,给标签写一个下标(索引)
举例:定位百度 hao123链接
driver.find_element_by_xpath('//div[3]/a[2]')
6.4、使用元素属性定位(用的多)
元素属性定位要求属性能够定位到唯一一个元素,如果存在多个相同条件的标 签,默认定位第一个,具体格式 //标签名[@属性=“属性值”]
支持使用and 和 or 关键字,多个属性一起定位元素。
driver.find_element_by_xpath("//[@class='s_ipt']").send_keys('哈哈哈')
注意:当引号需要嵌套时,要’ "交替使用
支持使用and 和 or 关键字,多个属性一起定位元素:
driver.find_element_by_xpath("//input[@class='s_ipt' and @name='wd']").send_keys('哈哈哈')
备注: Xpath支持通配符号 * 号,通过属性定位还可以如下写法:
driver.find_element_by_xpath("//*[@*='wd']")
6.5、使用部分属性值匹配(也称为模糊方法定位):
适用于元素属性会发生动态变化的时候
6.5.1 元素属性值开头包含内容:starts-with()
driver.find_element_by_xpath("//a[starts-with(@name,'tj_trhao')]").click()---打开hao123
6.5.2 元素属性值结尾包含内容:substring()
属性值从某个位置开始到结尾是否为某个字符串
driver.find_element_by_xpath("//a[substring(@name,9)='123']") --从第九位开始到末尾=123
6.5.3 元素属性值结尾包含内容:contains()
driver.find_element_by_xpath("//a[contains(@name,'news')]").click()
6.6、使用元素文本定位
元素文本在xpath中可以通过text()函数获取,也可以用其来进行元素定位。
driver.find_element_by_xpath("//a[text()='新闻']").click()
driver.find_element_by_xpath("//a[contains(text(),'新')]").click()