id,name,class_name(这三种是元素的属性,而selenium单独针对这三种属性提供了对应的定位方法)
tag_name(这个针对标签名称定位)
link_text,partial_link_text(这个针对a标签,就是文本超链接定位)
XPath(这个基于元素的路径定位)
css定位 (这个基于元素选择器):
元素定位八种方式
id定位:
driver.find_element(By.ID,value="属性值")
name定位:
driver.find_element(By.NAME,value="属性值")
class_name定位(使用元素的class属性):
l1=driver.find_element(By.CLASS_NAME,value="属性值").click()
tag_name定位(标签名称<标签名.../>):
如果只有一个相同名称的标签可以用find_element
driver.find_element(By.TAG_NAME,value="input")#定位第一个元素
如果有多个相同的标签需要用find_elements
driver.find_elements(By.TAG_NAME,value="input")[2].click()#定位第二个元素
link_text定位 (定位超链接 a标签):
driver.find_elements(By.LINK_TEXT,value="访问 新浪 网站")
partial_link_text定位(定位超链接 a标签 模糊):
driver.find_elements(By.PARTIAL_LINK_TEXT,value="访问")
或
driver.find_elements(By.PARTIAL_LINK_TEXT,value="访问 新浪 网站")
XPath定位 (基于元素路径):
绝对路径定位:/单斜杠
driver.find_element(By.XPATH,value="/html/body/div[2]/div[4]/div/div[2]/button[1]").click()
相对路径://双斜杠
driver.find_element(By.XPATH,value="//button[@id='applyMail']").click()#任意属性都可以
或者:
driver.find_element(By.XPATH,value="//*[@id='applyMail']").click()#(*)星号代表所有元素,但是此方法,需要遍历一遍所有元素查找,速度慢
driver.find_element(By.XPATH,value="//button@id='applyMail' and @class='btn btn-primary btn-lg']").click()
建议:
一般建议使用指定标签名称,不使用*代替,效率慢无论是绝对路径还是相对路径,/后面必须要为元素的名称或者*在工作中,如果能使用相对路径绝对不使用绝对路径 太长;一旦页面结构发送变化(比如开发加个div层级就会发送变化,定位就失效了)XPATH定位扩展:
//*text()="xxx"----------------------------------------------文本内容是xxx的元素
//*[contains(@属性,"xxx")]-------------------------属性中含有xxx的元素(移动端经常会用到)
//*[starts-with(@属性,"xxx")]----------------------属性以xxx开头的元素
css定位 (元素选择器)推荐使用,比XPATH效率高,其他定位有的css定位差不多都有非常灵活:
id选择器class选择器元素选择器属性选择器层级选择器 id选择器driver.find_element(By.CSS_SELECTOR,value="#applyMail")#选择id属性值(格式#id)
class选择器
driver.find_element(By.CSS_SELECTOR,value=".btn-primary")
组合在一起定位
元素选择器
driver.find_element(By.CSS_SELECTOR,value="div")#标签
driver.find_element(By.CSS_SELECTOR,value="随机邮箱")#界面元素
属性选择
driver.find_element(By.CSS_SELECTOR,value="[id='applyMail']")
层级选择器
>与空格两个方式的区别:
>:表示必须为子元素;空格:则不用(可以是孙子辈,或者重孙辈.....)
备注:虽然现在浏览器可以复制路径进行定位,但不建议使用,毕竟层级接口一旦改变定位就失效了(性能低)
定位一组元素:elements
driver.find_elements(By.CSS_SELECTOR,value="div button")[1].click()#定位一组元素使用elements#定位申请邮箱按钮
代码解释:
find_element(By.ID,value="")(find:查找,element:元素,By:通过,ID:id属性)
以前的写法find_element_by_id已经不可用了,这样写会报错
PS:一般情况下id属性值是唯一的,name可以重名,class_name可以有多个
快捷键导包:
常用方法:
元素输入方法:浏览器对象.send_keys("内容")关闭浏览器方法:浏览器对象.quit()打开浏览器url:浏览器对象.get(url)获取浏览器驱动对象方法:浏览器对象=webdriver.chrome()导包:from selenium import webdriver标签解释:
标签:如果标签的类型type=text,那这个元素就是文本框,如果type=submit或者botton的时候,那这个元素就是一个按钮