目录
很多的小伙伴私信凡叔在问定位的问题,这里凡叔给大家写了关于python所有能用到的定位方式,希望大家都能有所收获哦。
一、元素定位
1、通过id进行定位
find_element_by_id()
2、通过name进行定位
find_element_by_name()
3、通过class进行定位,class有多重属性时,只取其中一个
find_element_by_class_name()
4、通过标签进行定位
find_element_by_tag_name()
5、通过文本进行定位
find_element_by_link_text()
6、通过部分文本进行定位
find_element_by_partial_link_text()
7、通过路径进行定位
find_element_by_xpath()
8、通过css进行定位
find_element_by_css_selector()
9、通过复数属性定位
find_elements_by_xxx()[0]
二、鼠标事件
1、右击 context_click() 2、双击 double_click() 3、拖动 drag_and_drop(source,target) 4、鼠标悬停 move_to_element() 例子:
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_name("name") ActionChains(driver).context_click(element).perform()
三、键盘事件
1、删除键 send_keys(Keys.BACK_SPACE) 2、空格键 send_keys(Keys.SPACE) 3、制表键 send_keys(Keys.TAB) 4、回退键 send_keys(Keys.ESCAPE) 5、回车键 send_keys(Keys.ENTER) 6、全选 send_keys(Keys.CONTROL,'a') 7、复制 send_keys(Keys.CONTROL,'c') 8、剪切 send_keys(Keys.CONTROL,'x') 9、粘贴 send_keys(Keys.CONTROL,'v') 10、键盘F1 send_keys(Keys.F1) 11、键盘F5 send_keys(Keys.F5) 12、键盘F12 send_keys(Keys.F12) 例子:
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("id").send_keys(Keys.CONTROL, 's')
四、iframe定位
1、通过iframe的id进行定位 driver.switch_to.frame("id") 2、没有id或id为动态变化值,通过标签定位 iframe = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(iframe) 3、若标签不唯一,使用复数定位 iframe = driver.find_elements_by_tag_name("iframe")[0] driver.switch_to.frame(iframe) 4、索引定位,index driver.switch_to.frame(index)
五、select定位
例子: <select name="NR" id="nr"> <option value="10" selected="">每页显示10条</option> <option value="20">每页显示20条</option> <option value="50">每页显示50条</option> </select> 1、通过内容定位
select_by_visible_text("每页显示50条") 2、通过索引定位,下表从0开始,值为数字
select_by_index(1)
3、通过value值进行定位,值为字符串
select_by_value("50")
六、alert定位
问题:如何判断是否是alert弹框?
回答:在浏览器中打开弹框,箭头定位不到元素的则是alert,能定位到的则不是alert,用普通定位
步骤一:点击弹框按钮
js='$(".prefpanelgo").click()'
步骤二:执行js
driver.execute_script(js)
步骤三:切换到弹框窗口
al=driver.switch_to.alert
1、获取弹框上的文字
print(al.text)
2、点击确定
al.accept()
3、点击取消
al.dismiss()
4、输入框
al.send_keys("输入内容")
七、xpath定位
1、通过id定位 find_element_by_xpath(".//*[@id='xx']") 2、通过tag标签定位 find_element_by_xpath(".//input[@id='xx']") 3、通过class定位 find_element_by_xpath(".//*[@class='xx']") 4、通过name定位 find_element_by_xpath(".//*[@name='xx']") 5、组合定位 find_element_by_xpath(".//*[@id='xx' and @name='xx']") 6、绝对路径定位 find_element_by_xpath(".//*[@id='loginPanel']/div/table/tbody/tr[2]/td/input") 7、相对路径定位 find_element_by_xpath(".//*[@id='loginPanel']//tr[2]//input") 8、文本定位 find_element_by_xpath(".//*[text()='xxx']") 9、模糊匹配定位 .//*[contains(text(),'文本内容')] .//*[contains(@id,'xx')] 10、模糊匹配以XX开头 .//*[starts-with(@id,'xx')] .//*[starts-with(text(),'xx')] 说明:
1、 . 表示当前路径(可有可无)
2、 // 表示相对定位,匹配后面内容所有项
3、 * 表示获取全部标签
4、 .. 回到上级目录,与cmd命令一致
5、 and 连接两个属性
八、css定位
1、多个属性定位 find_element_by_css_selector("input#xxx[name='']") 2、层级定位 find_element_by_css_selector("table>tr>td") 3、复数定位,下标从1开始 find_element_by_css_selector(".mnav:nth-child(1)") (1)通过id find_element_by_css_selector("#xxx") (2)通过class find_element_by_css_selector(".xxx") (3)通过标签 find_element_by_css_selector("input") (4)通过其他属性 find_element_by_css_selector("[name='xxx']") 4、跨层级定位(爷爷、孙子)
find_element_by_css_selector("[name='xxx'] [name='xxx']")
九、元素获取
1、获取文本
.text()
2、获取属性值
.get_attribute()
3、获取标签
.tag_name()
4、判断元素显示或隐藏
.is_displayed()
5、获取浏览器名称
print(driver.name)
6、获取元素size
.size
十、jquery定位
1、发送文本值
$("#kw").val("python")
2、清空文本
$("#kw").val("")
3、点击
$("#kw").click()
十一、js定位
1、通过id定位 document.getElementById("id") 2、通过name获取 document.getElementsByName("name")[0] 3、通过标签定位 document.getElementsByTagName("button") 4、通过class定位 document.getElementsByClassName("classname") 5、通过css选择器定位 document.querySelectorAll("css selector")