python寻找多数元素_Python+selenium 如何找元素

八种元素定位的方法,常用的有id、name、class、tag、link、partial link、Xpath、css,道理我都懂,可是我在用的时候如何挑选哪种呢?方法很重要,但是思路不对的话,使用的方法可能还是不奏效。

一.id定位,html规定id属性在html文档中必须是唯一的(类似于公民的身份证号级别),具有很强的唯一性;

find_element_by_id()方法,应用:find_element_by_id('su’)

二.name定位,html规定name指定元素的名字(类似于人的名字),在当前页面可以不唯一;

find_element_by_name()方法,应用:find_element_by_name(‘kw’)

三.class定位,html规定class指定元素的类名;

find_element_by_class_name()方法,应用:find_element_by_class_name(’S_ipt’)

四.tag定位,html的本质通过tag定义实现不同的功能,如

、、 等tag(标签),tag方法很少用,准确率很低;

find_element_by_tag_name(),应用:find_element_by_tag_name(‘input’)

五.link定位,专门用来定位短的文本链接的方法;

find_element_by_link_text(),应用:find_element_by_link_text('新闻’)

六. partial link定位,专门用来定位长的文本链接的方法;

find_element_by_partial_link_text(),应用:find_element_by_partial_link_text(‘很长文本’)

七.Xpath定位,应用场景存在多个id、name、class属性,多个id、name、class属性相同,每次刷新id、name、class属性都会变化;

find_element_by_xpath()方法

1.绝对路径定位;

find_element_by_xpath(‘/html/body/div/div/div[4]/div/div/form/span/input')

注:div[4]是指第四个div;

2.利用元素属性定位;

find_element_by_xpath(‘//input[@id=‘ku']’)

注://指当前页面某个目录下;

input表示定位元素标签名;

[@id=‘ku']表示这个元素id属性等于ku;

find_element_by_xpath(‘//*[@class=‘ku']’)

注:*不指定标签名

find_element_by_xpath(‘//input[@type=‘ku']’)

注:type标签可任意指定,只要它是唯一的标识一个元素即可;

3.利用层级和属性的结合;

find_element_by_xpath(‘//span[@id=’s_btn_wr’]/input')

假设,这样还找不到继续往父级标签找:

find_element_by_xpath(‘//div/from[id=‘form']/span/input’)

4.使用逻辑运算符;

find_element_by_xpath(‘//form/span[@id=’s_btn_wr’and @class=’s_btn_wr_s_btn_wr_bg']/input)

也可使用firebug来“复制xpath”得到当前元素的语法,chrome也可以。

八 .css定位,css层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言;

find_element_by_css_selector()

1.通过class属性定位(点号“.”表示通过class属性定位元素);

find_element_by_css_selector(“.s_ipt")

2.通过id属性定位(井号“#”表示通过id属性定位元素);

find_element_by_css_selector(“#kw”)

3.通过标签名定位,用标签名不需要任何标识符标识(一般很容易重复,很少用);

find_element_by_css_selector(“input”)

4.通过父子关系定位;

find_element_by_css_selector(“span>input”)

5.通过属性定位;

find_element_by_css_selector(“[autocomplete=“off"]”)

find_element_by_css_selector(“[name="wd"]”)

6.组合定位;

find_element_by_css_selector(“form.fm>span>input#s_ispt”)

find_element_by_css_selector(“form#form>span>input#id”)

注:也可用用firepath生成CSS语法,办法跟xpath类似。

即使有了八把方法,在实际应用中可能还是找不到元素,这个时候首先排查是不是环境问题(如:浏览器自动升级了与驱动不匹配),排除这个问题后,可能有下面几个问题影响:

1.它可能找到了多个元素;

2.多数web应用程序使用AJAX技术,浏览器加载页面可能不是同步完成,会出现ElementNotVisbleException报错可以通过设置元素等待解决这种问题;

3.表单是嵌入式的,需要使用switch_to.frame(),切入镶嵌表单。

·····可能还有更多...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值