Selenium定位网页元素只要是通过元素的属性值或者元素在HTML里的路径位置,定位方式一共有8种:
定位方式 | 代码 |
---|---|
属性id | find_element_by_id() |
属性name | find_element_by_name() |
HTML标签类型 | find_element_by_tag_name() |
属性class | find_element_by_class_name() |
标签值 | find_element_by_link_text() |
标签值模糊匹配 | find_element_by_partial_link_text() |
元素的路径定位选择器 | find_element_by_xpath() |
元素的路径定位选择器 | find_element_by_css_selector() |
以上8种定位都只能定位一个元素,如果有多个相同的元素那么会定位到第一个元素。
其中挑几个重点讲一下:
1.id和name在一个页面往往是唯一的所以他们的定位准确度较高。2.classname和tagname一般是被很多个元素使用,如果要定位单一元素的话慎用(毕竟你也很难看出来你需要的元素是不是第一个)。
3.linktext一般是用来定位某些超链接的,因为超链接的text比较唯一,比如百度主页上方的超链接。
同时加个partial就可以实现模糊匹配,比如要匹配新闻这个链接就只需要一个‘新’就可以了,当然如果有多个元素含有‘新’就只能定位到第一个了。
4.xpath和css_selector,前者是定位选择器,后者是通过标签的路径来实现定位,两者的定位准确的都非常高,但是一但HTML代码发现更改就几乎无法复用。同时说一下怎么获取一个元素的xpath和css_selector
,F12后在Elements中选取自己想要定位的HTML元素然后右键就可以点击copy,copy想要copy的内容了。
上述的都只能定位一个元素,如果要定位很多个相同的元素就需要换用一下的方式了(其实就是element加了个s):
定位方式 | 代码 |
---|---|
属性id | find_elements_by_id() |
属性name | find_elements_by_name() |
HTML标签类型 | find_elements_by_tag_name() |
属性class | find_elements_by_class_name() |
标签值 | find_elements_by_link_text() |
标签值模糊匹配 | find_elements_by_partial_link_text() |
元素的路径定位选择器 | find_elements_by_xpath() |
元素的路径定位选择器 | find_elements_by_css_selector() |