python selenium(定位方法)
一、定位方法
注意:元素属性必须唯一存在
#id定位 find_element_by_id() #name定位 find_element_by_name() #class_name定位 find_element_by_class_name() #链接文本定位 find_element_by_link_text() #部分链接文本定位 find_element_by_partial_link_text() #xpath定位 find_element_by_xpath() #css定位 find_element_by_css_selector() #tag_name定位 find_element_by_tag_name() #selenium By定位,使用这种用法前需要导入By类,如下: from selenium.webdriver.common.by import By #id定位 find_element(By.ID,value) #name定位 find_element(By.NAME,value) #class_name定位 find_element(By.CLASS_NAME,value) #链接文本定位 find_element(By.LINK_TEXT,value) #部分链接文本定位 find_element(By.PARTIAL_LINK_TEXT,value) #xpath定位 find_element(By.XPATH,value) #css定位 find_element(By.CSS_SELECTOR,value) #tag_name定位 find_element(By.TAG_NAME,value)
1.id定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_id("kw").send_keys("python")
2.name定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_name("wd").send_keys("python")
3.class_name定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_class_name("s_ipt").send_keys("python")
4.链接文本定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_link_text("hao123").click()
5.部分链接文本定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_partial_link_text("hao").click()
6.tag_name定位
- tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。任意打开一个页面,都会发现大量的<div>、<input>、<a>等tag,所以tag name定位很少用
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") # js = "document.getElementById('kw').value='selement'" # dr.execute_script(js) inputs = dr.find_elements_by_tag_name("input") for i in inputs: if i.get_attribute("id") == "kw": #获取元素属性值进行判断 i.send_keys("selenium")
7.Java_Script定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") js = "document.getElementById('kw').value='selenium'" dr.execute_script(js)
8.xpath定位
(1)直接复制页面中xpath
(2)相对路径(找祖籍)
- 两个斜线(//)代表相对路径
- 使用了通配符 * 表示匹配任意标签名
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_xpath('//*[@class="s_ipt"]').send_keys("python")
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_xpath('//input[@class="s_ipt"]').send_keys("python")
from selenium import webdriver from time import sleep dr =webdriver.Chrome() dr.get("http://xxxxxxxx.com/") dr.find_element_by_class_name("login").click() title1 = dr.title #组合定位 dr.find_element_by_xpath('//input[@placeholder="请输入手机号码" and @name="loginName"]').send_keys("1777982xxxx") dr.find_element_by_name("loginPwd").send_keys("xxxxxxxx") dr.find_element_by_xpath('//*[@class="login1"]/div[2]').click() sleep(2) title2 = dr.title if title1 == title2: raise AssertionError else: pass
(3)绝对路径/层级定位
- 从HTML元素DOM树从上至下一级一级查找
- / 表示上下级
from selenium import webdriver import time dr = webdriver.Chrome() dr.get("http://192.168.0.161:8081/discuz/forum.php") time.sleep(2) dr.find_element_by_xpath("html/body/div[5]/div/div[1]/form/div/div/table/tbody/tr[1]/td[2]/input").send_keys("zhengying")
(4)相对路径结合绝对路径用法
from selenium import webdriver import time dr = webdriver.Chrome() dr.get("http://192.168.0.161:8081/discuz/forum.php") time.sleep(2) dr.find_element_by_xpath('//*[@id="lsform"]/div/div/table/tbody/tr[1]/td[2]/input').send_keys("zhengying")
9.css定位
css常用符号:
- # 表示id
- . 表示class
- > 表示子元素,层级
(1)css中通过id定位
from selenium import webdriver import time dr = webdriver.Chrome() dr.get("https://www.baidu.com") time.sleep(2) dr.find_element_by_css_selector("#kw").send_keys("zhengying")
(2)css中通过class定位
from selenium import webdriver import time dr = webdriver.Chrome() dr.get("https://www.baidu.com") time.sleep(2) dr.find_element_by_css_selector(".s_ipt").send_keys("selenium")
(3)通过其它属性定位
find_element_by_css_selector("[属性='属性值']") find_element_by_css_selector("[属性=属性值]") ---------------- 请注意这里属性值没有加引号 find_element_by_css_selector("[属性1=属性值1][属性2=属性值2]") ---------------- 组合定位
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") dr.find_element_by_css_selector('[id=kw]').send_keys("selenium")
from selenium import webdriver dr = webdriver.Chrome() dr.get("https://www.baidu.com") #组合定位 dr.find_element_by_css_selector('[id=kw][name=wd]').send_keys("selenium")
(4)通过父子关系定位:
- 假如你不知道某人的身份证号码、名字、手机号码等信息时无法取得联系,但是你知道某人爸爸的手机号码,此时你可以通过他爸爸来找到某人。
- 换成术语就是当我们定位元素时,发现没有可以标识的唯一的元素的属性值时,那我们可以考虑用父亲标签结合属性来定位元素。
- css路径定位时,不能和xpath定位一样标注出第几个标签
from selenium import webdriver import time dr = webdriver.Chrome() dr.get("http://192.168.0.161:8081/discuz/forum.php") time.sleep(2) dr.find_element_by_css_selector('.scbar_txt_td > input').send_keys("selenium")
(5)css的绝对路径定位
from selenium import webdriver import time dr = webdriver.Chrome() dr.get("http://192.168.0.161:8081/discuz/forum.php") time.sleep(2) dr.find_element_by_css_selector('html>body>div>div>div>form>div>div>table>tbody>tr>td>input').send_keys("selenium")
作者:一个老宅男
微信:ZhengYing8887
出处:https://www.cnblogs.com/ZhengYing0813/
备注:本文版权归作者所有,欢迎转载和添加作者微信探讨技术,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。