Python selenium根据class定位页面元素

  在平常的网页源码中,咱们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的。可是实际工做中,不少前端开发人员并未给每一个元素都编写id属性。一般一段html代码以下:css

1 <div class="sui-tips s-isindex-wrap sui-tips-exceedtipnews" style="display: none; width: auto;"><div class="sui-tips-arrow" style="left: 15px;"><em></em></div><div class="sui-tips-body">今天召唤我太屡次啦,<br>明天再来调教小度吧!`(*∩_∩*)′</div></div>

这个例子中,最外层的div就没有id属性,此时,能够基于class属性来定位元素。常见的基于class定位元素的selenium写法以下:html

1、
driver.find_element_by_class_name("classname")
可是好多时候,不少并列的元素如list表单,class都是共用同一个,如:

此时driver.find_elements_by_class_name("classname")  就能够派上用场了,该方法能够返回的是一个list列表,那么全部针对list的方法在它上面都一样适用。好比,若是咱们知道想要定位的元素在页面中是第n个,则能够这样定位:前端

2、python

driver.find_elements_by_class_name("classname")[n]   (注意:是elements,不是element)浏览器

须要注明的是,使用上述方法,即便这网页中样的元素只有一个,获得的依旧是一个list对象,只不过长度为1.函数

固然若是你对css方法比较熟悉,还能够经过css来定位,selenium一样是支持的,css中,"."后面跟class名便可,一个常规的写法以下:学习

3、ui

driver.find_element_by_css_selector('.dtb-style-1').click()   spa

若是你的例子足够特殊,这个元素的classname有多个,上面的方法还能够用多个"."进行并行链接。如:3d

driver.find_element_by_css_selector('.dtb-style-1.table-dragColumns').click()

还有一种方法一样能够支持多个类的状况,仍是css属性方法:

driver.find_element_by_css_selector("[class='dtb-style-1 table-dragColumns']") 用空格分隔便可。

若是你对css属性不熟悉的话,也不打紧,强大的Chrome浏览器能自动帮你生成元素的xpath、css等多种属性。拿百度首页的源码举例,在页面源码文件,定位到元素后,右键,效果以下:

生成的代码复制后,针对此场景能够直接拿来用,可是鉴于如今的网页更新很是频繁,建议仍是要在w3c下简单学习下xpath、css selector等重要方法,那样咱们能够写出很是灵活的代码,对页面的细微调整会有更强的适应性。

最后,咱们还能够经过强大的xpath来定位元素,若是元素有多个class,咱们只用选择其中一个放入xpath中便可,不然程序会出错。示例以下:

4、

driver.find_element_by_xpath('//div[@class="u_sp"]/a[1]').click()

  这么多方法中,xpath是最最灵活的,由于xpath内置了不少函数,在某些场合中你可能就须要依靠这种灵活性,"灵活"就不可避免的会带来复杂性。尽管如此,笔者仍是鼓励大家,在实际工做中,每种定位元素的方法都要学会,不少时候,你会发现你精心写的方法一不当心就不灵了,这个时候掌握多种定位方法,就显得尤其重要了。

有了这些技能,今后在python selenium的世界里,基于class属性定位元素将显得so easy。

相关文章
相关标签/搜索