一、定位元素: 1、要实现UI自动化,就必须学会定位web页面元素,selenium核心,webdrvier 模块提供了 2、9种定位元素 定位方式 提供方法 id定位 find_element_by_id() name定位 find_element_by_name() class定位 find_element_by_class_name() link定位 find_element_by_link_text() partial link定位 find_element_by_partial_link_text() JavaScript定位 document.getElementById(“kw”).value=“duoceshi” tag定位 find_element_by_tag_name() xpath定位 find_element_by_xpath() css定位 find_element_by_css_selector() 3、在这9种常用的定位方法中, 优先顺序 1)有id优先使用id定位 2)没有id,考虑使用name或者class定位。 3)如果没有id,name,class再考虑用xpath,css定位。 4)如果是链接可以考虑使用link_text,partial_link_text 定位。 5)tag_name和JavaScript还是用的比较少的。 我们根据实际情况,具体问题具体分析
===================================== 二、实战定位 (1)url=‘https://www.baidu.com/’ (2)打开f12 定位元素 (1) id定位 find_element_by_id() 案例: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_id(‘kw’).send_keys(“dcs”)
(2) name定位 find_element_by_name() 案例: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_name(‘wd’).send_keys(‘hz’)
(3)class定位 find_element_by_class_name() 案例3: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_class_name(“s_ipt”).send_keys(‘class定位’)
(4) link定位 find_element_by_link_text() 案例: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_link_text(“hao123”).click()
(5) partial link定位 find_element_by_partial_link_text() 案例: d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_partial_link_text(“hao”).click() (6) JavaScript定位 document.getElementById(“kw”).value=“duoceshi” 案例: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) js=‘document.getElementById(“kw”).value=“js定位”’ d.execute_script(js)
(7) tag定位 find_element_by_tag_name() 案例: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) inputs=d.find_elements_by_tag_name(“input”) #通过elements 来找到当前百度中所有的input标签 for i in inputs: if i.get_attribute(“name”)==‘wd’: i.send_keys(“tag定位”) (8) xpath定位 find_element_by_xpath() 第一步:复制xpath //[@id=“kw”] 第二步: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath('//[@id=“kw”]').send_keys(“xpth定位”)
(9)css定位 find_element_by_css_selector() 第一步:在页面右键==copy=selector #kw 第二步: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(“#kw”).send_keys(“css 定位”)
====================================================== 详细讲解xpath和css
一、xpath方法 1、路径的区分: (1)绝对路 特点:a、以单斜杠/开头, b、从页面跟元素(html标签)开始,严格按照元素在html页面中的位置和顺序向下查找 案例:/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
(2)相对路径(我们定位一般用相对路径) 特点:a、以双斜杠 // k开头 b、不考虑元素在页面中的绝对路径和位置 c、只考虑是否存在符合表达式的元素即可。 案例 ://*[@id=“kw”]
(3) 使用标签名+节点属性点位 语法://标签名[ @属性名=属性值] //表示相对路径,从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置 . 选择当前节点 。。选择当前节点的父节点 @ 匹配任何属性节点 @选取属性 案例: //[@id=‘kw’] // [@name=‘wd’] //[@id=“form”] //[@id=“form”]/span[1]
实战:xpath实例 (1)xpath中的id定位
from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath(‘//[@id=“kw”]‘).send_keys(“xpth中id定位”) (2)xpath中的name定位 格式:d.find_element_by_xpath(’//[@name=“wd”]’).send_keys(“xpth中name定位”) 案例: from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath(‘//*[@name=“wd”]’).send_keys(“xpth中name定位”)
(3)xpath中的class定位 格式:d.find_element_by_xpath(‘//[@class=“s_ipt”]‘).send_keys(“xpth中class定位”) 案例: from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath(’//[@class=“s_ipt”]’).send_keys(“xpth中class定位”)
(4)xpath中的其他定位 格式:d.find_element_by_xpath(‘//[@autocomplete=“off”]‘).send_keys(“xpth中其他定位”) from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath(’//[@autocomplete=“off”]’).send_keys(“xpth中其他定位”)
(5)xpath中的组合定位(and) from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath(‘//*[@autocomplete=“off” and @maxlength=“255”]’).send_keys(“xpth中组合定位”)
(6)xpath中层级定位 上上级://[@id=“form”] 上一级:span ://[@id=“form”]/span[1] 自己://[@id=“form”]/span[1]/input[1] 案例: from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_xpath('//[@id=“form”]/span[1]/input[1]').send_keys(“层级定位”)
===================================== css定位详解: css 复制页面元素=右键copy==copy selectot css的:#kw (1)场景1 css中的id定位 情况1:id简写 案例1 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(“#kw”).send_keys(“id 简写#表示”) 情况2:id 全称 from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(“[id=‘kw’]”).send_keys(“id全称定位”)
(3)场景1 css中的clss定位 情况1:class简写 from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(‘.s_ipt’).send_keys(“class简写定位”)
情况2:class全称 from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(‘[class=“s_ipt”]’).send_keys(“class全称定位”)
情况3:name全称定位 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(“[name=‘wd’]”).send_keys(“name全称定位”)
情况4:其他属性全称定位 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(“[autocomplete=‘off’]”).send_keys(“其他属性全称定位”)
情况5:组合属性全称定位 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(“[autocomplete=‘off’][name=‘wd’]”).send_keys(“组合属性全称定位”)
情况6:层级定位 情况1:上上级定位 from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(‘form>span>input’).send_keys(“上上级定位”)
情况1:上级定位 from selenium import webdriver #导入selenium库 中webdriver 函数 from time import * #导入time模块 d=webdriver.Chrome() d.get(“https://www.baidu.com/”) sleep(3) d.find_element_by_css_selector(‘span>input’).send_keys(“上级定位”)
============================== 拓展知识:(不讲解) elements是复数,返回的是一个列表 0.id复数定位find_elements_by_id(self, id_) 1.name复数定位find_elements_by_name(self, name) 2.class复数定位find_elements_by_class_name(self, name) 3.tag复数定位find_elements_by_tag_name(self, name) 4.link复数定位find_elements_by_link_text(self, text) 5.partial_link复数定位find_elements_by_partial_link_text(self, link_text) 6.xpath复数定位find_elements_by_xpath(self, xpath) 7.css复数定位find_elements_by_css_selector(self, css_selector
|