💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 一、十八种定位方法 前八种是大家都熟悉的,经常会用到的 ``` 1.id定位:find_element_by_id(self, id_) 2.name定位:find_element_by_name(self, name) 3.class定位:find_element_by_class_name(self, name) 4.tag定位:find_element_by_tag_name(self, name) 5.link定位:find_element_by_link_text(self, link_text) 6.partial_link定位find_element_by_partial_link_text(self, link_text) 7.xpath定位:find_element_by_xpath(self, xpath) 8.css定位:find_element_by_css_selector(self, css_selector) ``` <br /> 这八种是复数形式 ``` 9.id复数定位find_elements_by_id(self, id_) 10.name复数定位find_elements_by_name(self, name) 11.class复数定位find_elements_by_class_name(self, name) 12.tag复数定位find_elements_by_tag_name(self, name) 13.link复数定位find_elements_by_link_text(self, text) 14.partial_link复数定位find_elements_by_partial_link_text(self, link_text) 15.xpath复数定位find_elements_by_xpath(self, xpath) 16.css复数定位find_elements_by_css_selector(self, css_selector ``` <br /> 这两种就是快失传了的 ``` find_element(self, by='id', value=None) find_elements(self, by='id', value=None) ``` <br /> ## 二、element和elements傻傻分不清 1. element方法定位到是是单数,是直接定位到元素 2. elements方法是复数,定位到的是一组元素,返回的是list队列 3. 可以用type()函数查看数据类型 4. 打印这个返回的内容看看有什么不一样 ![Snipaste_2020-08-21_14-14-17.png](https://i.loli.net/2020/08/21/4NCmO68Ac7lqFVx.png) <br /> ## 三、elements定位方法 1. 前面一篇已经讲过find\_element()的用法,看这里: 2. 这里重点介绍下用elements方法如何定位元素,当一个页面上有多个属性相同的元素时,然后父元素的属性也比较模糊,不太好定位。 这个时候不用怕,换个思维,别老想着一次定位到,可以先把相同属性的元素找出来,取对应的第几个就可以了。 3. 如下图,百度页面上有六个class一样的元素,我要定位“地图”这个元素 ![Snipaste_2020-08-21_14-21-57.png](https://i.loli.net/2020/08/21/AlIkG4B2uf5HCqS.png) 4. 取对应下标即可定位了 ![Snipaste_2020-08-21_14-24-33.png](https://i.loli.net/2020/08/21/tbs8Nm2vuV7lH5E.png) <br /> ## 四、参考代码 ``` # coding:utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") # 这里用的css语法 elements = driver.find_elements("css selector", ".mnav") # '地图'在第三个位置 print(elements[2].text) elements[2].click() # 这个写法也是可以的 driver.find_elements("css selector", ".mnav")[2].click() ```