目录 一、定位⼀组元素⽅法 二、XPath 定位⽅法 1. 路径策略 2. 利⽤元素属性策略 3. 属性和逻辑结合 4. 层级和属性结合策略 5. XPath 延伸⽅法 三、CSS 定位⽅法 1. CSS 策略: id选择器/class选择器/元素选择器/属性选择器 2. 属性选择器使⽤注意事项 3. 层级选择器 4. CSS 延伸⽅法 四、元素定位⽅法的另⼀种写法
一、定位⼀组元素⽅法
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_name( 'AAA' ) . send_keys( 'admin' )
elements = driver. find_elements_by_name( 'AAA' )
print ( elements)
print ( type ( elements) )
elements[ 1 ] . send_keys( '123456' )
new_els = driver. find_elements_by_tag_name( 'input' )
new_els[ 2 ] . send_keys( '13800001111' )
new_els[ 3 ] . send_keys( '123@qq.com' )
sleep( 3 )
driver. quit( )
二、XPath 定位⽅法
说明: XPath 即为 XML Path 的简称,它是⼀⻔在 XML ⽂档中查找元素信息的语⾔。 HTML 可以看做是 XML 的⼀种实现,所以 Selenium ⽤户可以使⽤这种强⼤的语⾔在 Web 应⽤中定位元素 注意: ⽆论使⽤哪⼀种 XPath 策略(⽅法), 定位⽅法都是同⼀个, 不同策略只决定⽅法的参数的写法 ⽅法: find_element_by_xpath(‘XPath策略’)
1. 路径策略
说明: 绝对路径: 从最外层元素到指定元素之间所有经过元素层级的路径 1). 绝对路径以/html根节点开始,使⽤/来分隔元素层级; 如: /html/body/div/fieldset/p[1]/input 2). 绝对路径对⻚⾯结构要求⽐较严格,不建议使⽤ 相对路径: 匹配任意层级的元素,不限制元素的位置 1). 相对路径以//开始 2). 例如: //input 或者 //*
1.1 路径值获取⽅法
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_xpath( '/html/body/div/fieldset/form/p[1]/input' ) . send_keys( 'admin' )
sleep( 2 )
driver. find_element_by_xpath( '//*[@id="passwordA"]' ) . send_keys( '123' )
sleep( 3 )
driver. quit( )
2. 利⽤元素属性策略
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_xpath( '//*[@placeholder="请输⼊⽤户名"]' ) . send_keys( 'admin' )
sleep( 3 )
driver. quit( )
利⽤元素属性策略的注意事项
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_xpath( '//*[@type="text"]' ) . send_keys( 'admin' )
driver. find_element_by_xpath( '//*[@class="emailA dzyxA"]' ) . send_keys( '123@qq.com' )
sleep( 3 )
driver. quit( )
3. 属性和逻辑结合
属性和逻辑集合: 解决⽬标元素单个属性和属性值⽆法定位为⼀个元素的问题时使⽤ 语法: //*[@属性1=“属性值1” and @属性2=“属性值2”] 注意: 多个属性值由 and 连接, 每⼀个属性都要由@开头, 可以根据需求使⽤更多属性值
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_xpath( '//*[@name="user" and @class="login"]' ) . send_keys( 'admin' )
sleep( 3 )
driver. quit( )
4. 层级和属性结合策略
层级与属性结合: ⽬标元素⽆法直接定位, 可以考虑先定位其⽗层级或祖辈层级, 再获取⽬标元素 语法: ⽗层级定位策略/⽬标元素定位策略
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_xpath( '//*[@id="p1"]/input' ) . send_keys( 'admin' )
sleep( 3 )
driver. quit( )
5. XPath 延伸⽅法
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
分内容进⾏元素定位
driver. find_element_by_xpath( '//*[contains(@id,"ss")]' ) . send_keys( '123456' )
driver. find_element_by_xpath( '//*[starts-with(@id,"te")]' ) . send_keys( '13800001111' )
driver. find_element_by_xpath( '//*[text()="访问 新浪 ⽹站"]' ) . click( )
sleep( 3 )
driver. quit( )
三、CSS 定位⽅法
说明: 通过 CSS 的选择器语法定位元素 注意: Selenium 框架官⽅推荐使⽤ CSS, 因为其定位效率远⾼于 XPath CSS 选择器策略也有很多, 但是⽆论哪⼀个策略使⽤的都是同⼀个定位⽅法 ⽅法: find_element_by_css_selector(‘CSS策略’)
1. CSS 策略: id选择器/class选择器/元素选择器/属性选择器
from time import sleep
from selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_css_selector( '#userA' ) . send_keys( 'admin' )
driver. find_element_by_css_selector( '[placeholder="请输⼊密码"]' ) . send_keys( '123456' )
driver. find_element_by_css_selector( '.telA' ) . send_keys( '18600000000' )
sleep( 2 )
driver. find_element_by_css_selector( 'button' ) . click( )
sleep( 3 )
driver. quit( )
2. 属性选择器使⽤注意事项
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file : // / Users/ comesoon/ Desktop/ page/ % E6% B3% A8% E5% 86 %
8CA. html')
则需要传⼊全部的属性值!
driver. find_element_by_css_selector( '[ class = "emailA
dzyxA"] ').send_keys(' 123 @qq. com')
sleep( 3 )
driver. quit( )
3. 层级选择器
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element_by_css_selector( '#pa>input' ) . send_keys( 'admin' )
driver. find_element_by_css_selector( 'form [placeholder="请输⼊⽤户名"]' ) . send_keys( 'admin' )
driver. find_element_by_xpath( '//form//*[@id="userA"]' ) . send_keys( 'admin' )
sleep( 3 )
driver. quit( )
4. CSS 延伸⽅法
from time import sleepfrom selenium import webdriver
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
定位元素
driver. find_element_by_css_selector( '[id^="pas"]' ) . send_keys( '123' )
driver. find_element_by_css_selector( '[id$="rdA"]' ) . send_keys( '123' )
定位元素
driver. find_element_by_css_selector( '[id*="ss"]' ) . send_keys( '123' )
sleep( 3 )
driver. quit( )
四、元素定位⽅法的另⼀种写法
from time import sleepfrom selenium import webdriver
from selenium. webdriver. common. by import By
driver = webdriver. Chrome( )
driver. get( 'file:///Users/comesoon/Desktop/page/%E6%B3%A8%E5%86%8CA.html' )
driver. find_element( By. ID, 'userA' ) . send_keys( 'admin' )
driver. find_element_by_id( 'passwordA' ) . send_keys( '123456' )
底层实现( 原理)
sleep( 3 )
driver. quit( )