Python+Selenium之元素定位总结及实例说明
⽹页⾃动化最基本的要求就是要定位到各个元素,然后才能对该元素进⾏各种操作(输⼊,点击,清除,提交等),所以笔者今天来总结下Selenuim+Python最基本的⼏种定位⽅式及实例说明,希望能帮助到⼤家。
⽬录
1.通过id定位元素
2.通过class_name定位元素
3.通过tag_name定位元素
4.通过name定位元素
5.通过link⽂字精确定位元素
6.通过link⽂字模糊定位元素
7.通过CSS定位元素
8.通过XPath定位元素
9.通过By定位元素
10.具体实例说明
以百度搜索输⼊框为例,具体说明各个定位⽅式的⽤法:
(通过chrome浏览器查看元素或者搜狐浏览器的firebug查看,即可看到html源码)
注意点:第四⾏的元素是灰⾊的,该元素是不可定位到的,下⽅会说明。
1.通过id定位元素
如果id不是动态的,⼀个页⾯的id是唯⼀的。最简单的定位⽅式。
使⽤:find_element_by_id("id_vaule")
实例: find_element_by_id("kw")
注意点:有些id值是动态变化的,则不能使⽤该⽅法定位。如下:id就是动态的,每次进⼊页⾯,该id都会改变。
<label id="auto-id-1469758879170" class="u-label f-dn">邮箱帐号或⼿机号</label>
2.通过class_name定位元素
classname有可能重复哦。
使⽤:find_element_by_class_name("class_name_vaule")
实例:find_element_by_class_name("s_ipt")
3.通过tag_name定位元素
标签名字最容易重复,不过,当定位⼀组数据时,可使⽤。
使⽤:find_element_by_tag_name("tag_name_vaule")
实例:f ind_element_by_tag_name("input")
注意点:当定位⼀组元素时:可勾选⼀组复选框。如下:
find_element_by_tag_name("input")
<body>
<h3>checkbox</h3>
<div class="well">
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="c1">checkbox1</label>
<div class="controls">
<input type="checkbox" id="c1"/>
</div>
</div>
<div class="control-group">
<label class="control-label"for="c2">checkbox2</label>
<div class="controls">
<input type="checkbox"id="c2"/>
</div>
</div>
<div class="control-group">
<label class="control-label"for="c3">checkbox3</label>
<div class="controls">
<input type="checkbox"id="c3"/>
</div>
</div>
</form>
</div>
</body>
4.通过name定位元素
name有可能会重复哦。
使⽤:find_element_by_name("name_vaule")
实例:find_element_by_name("wd")
5.通过link⽂字精确定位元素
<a onclick="return false;" class="lb" name="tj_login" href="passport.baidu/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu%2F ">登录</a>
使⽤:find_element_by_link_text("text_vaule")
实例:find_element_by_link_text("登录")
6.通过link⽂字模糊定位元素
使⽤:find_element_by_partial_link_text("部分text_vaule")
实例:find_element_by_partial_link_text("登")
7.通过CSS定位元素
CSS(Cascading Style Sheets)是⼀种语⾔,它⽤来描述HTML和XML⽂档的表现。CSS可以较为灵活的选择控件的任意属性,⼀般情况下会⽐XPath快。且语法也⽐较简洁。
不过CSS对于初学者⽽⾔⽐较复杂。
使⽤:find_element_by_css_selector("CSS")
实例:
7.1通过id属性定位元素
#号表⽰通过id属性来定位元素
find_element_by_css_selector("#kw")
7.2通过class属性定位元素
.号表⽰通过class属性来定位元素
find_element_by_css_selector(".s_ipt")
7.3通过标签名定位元素
find_element_by_css_selector("input")
7.4通过属性定位元素(挺常⽤的)
find_element_by_css_selector("[name='wd']")
find_element_by_css_selector("[maxlength='255']")
属性值包含某个值
属性值包含wd:适⽤于由空格分隔的属性值。
cssclass属性find_element_by_css_selector("[name~='wd']")
7.5⽗⼦定位元素
查有⽗亲元素的标签名为span,它的所有标签名叫input的⼦元素
find_element_by_css_selector("span>input")
7.6组合定位元素
标签名#id属性值:指的是该input标签下id属性为kw的元素
find_element_by_css_selector("input#kw")
标签名.class属性值:指的是该input标签下class属性为s_ipt的元素
find_element_by_css_selector("input.s_ipt")
标签名[属性=’属性值‘]:指的是该input标签下name属性为wd的元素
find_element_by_css_selector("input[name='wd']")
⽗元素标签名>标签名.class属性值:指的是span下的input标签下class属性为s_ipt的元素find_element_by_css_selector("span>input.s_ipt")
多个属性组合定位元素(挺常⽤的)
指的是input标签下class属性为s_ipt且name属性为wd的元素
find_element_by_css_selector("input.s_ipt[name='wd']")
指的是input标签下name属性为wd且maxlength为255的元素
find_element_by_css_selector("input[name='wd'][maxlength='255']")
⽐较复杂的CSS定位可查看
8.通过XPath定位元素
XPath是⼀种XML⽂档中定位元素的语⾔。该定位⽅式也是⽐较常⽤的定位⽅式。
使⽤:find_element_by_xpath(“XPath”)
实例:
8.1通过属性定位元素
find_element_by_xpath("//标签名[@属性=‘属性值’]")
id属性:
find_element_by_xpath("//input[@id='kw']")
class属性:
find_element_by_xpath("//input[@class='s_ipt']")
name属性:
find_element_by_xpath("//input[@name='wd']")
maxlength属性:
find_element_by_xpath("//input[@maxlength='255']")
8.2通过标签名定位元素
指所有input标签元素
find_element_by_xpath("//input")
8.3⽗⼦定位元素
查有⽗亲元素的标签名为span,它的所有标签名叫input的⼦元素
find_element_by_xpath("//span/input")
8.4根据元素内容定位元素(⾮常实⽤)
find_element_by_xpath("//p[contains(text(),'京公⽹')]")
例:
<p id="jgwab">
<i class="c-icon-jgwablogo"></i>
京公⽹安备11000002000001号
</p>
注:contains的另⼀种⽤法
//input[contains(@class,‘s’)]
说明class属性包含s的元素。
8.5组合定位元素
//⽗元素标签名/标签名的属性值:指的是span下的input标签下class属性为s_ipt的元素
find_element_by_xpath("//span/input[@class='s_ipt']")
多个属性组合定位(挺常⽤的)
指的是input标签下id属性为kw且name属性为wd的元素
find_element_by_xpath("//input[@class='s_ipt' and @name='wd']")
指的是p标签下内容包含“京公⽹”且id属性为jgwab的元素
find_element_by_xpath("//p[contains(text(),'京公⽹') and @id='jgwab']")
9.通过By定位元素
使⽤:find_element(定位的类型,具体定位⽅式)
定位的类型包括By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.XPATH,By.CSS_SELECTOR 具体定位⽅式参考上⽅1-8的说明。
实例:find_element(By.ID,'kw')
注意:使⽤By定位⽅式,需先导⼊By类。
from selenium.webdrivermon.by import By
10.具体实例说明
下⽅例⼦是登陆126邮件,然后发送邮件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论