定位⭐⭐
1.ID, 2.NAME, 3.LINK_TEXT, 4.PARTIAL_LINK_TEXT, 5.CLASS_NAME, 6.TAG_NAME, 7.XPATH, 8.CSS选择器
find_element查找单个元素,find_elements查找多个元素
刷新后需要重新定位
# 普通定位类型(定位方法、定位策略)
1、ID定位:有id属性,建议用id属性值进行定位。(最推荐)
driver.find_element(By.ID,'keyword').send_keys('100')
#找到搜索按钮前面的那一个文本框(关键字文本框),输入100
2、NAME定位:没有id属性时,也可以使用name属性值定位元素。(次推荐)
driver.find_element(By.NAME,'imageField').click()
#找到“搜索”按钮,点击它
3、LINK_TEXT ---链接文本定位
只用于定位超级链接(<a……),并且<a……>与之间存在较短的文本的情况。
要求定位数据必须与<a……>与之间文本完全一致。(相等、精确匹配)
driver.find_element(By.LINK_TEXT,'高级搜索').click()
#找到文本是“高级搜索”的超级链接,点击它
4、PARTIAL_LINK_TEXT ---部分链接文本定位
- 只用于定位超级链接(<a……),并且<a……>与之间存在较长的文本的情况。
- <a……>与之间文本只要包含定位数据就可以定位到。(包含、模糊匹配)
5、CLASS_NAME: 定位Class属性值定位元素
driver.find_element(By.CLASS_NAME,'bnt_blue_2').click()
#找到一个类名是bnt_blue_2的“查询该订单号”的按钮,点击它
6、TAG_NAME: 定位标签名
driver.find_element(By.TAG_NAME,'textarea').send_keys('111')
#找到标签名是textarea的文本域,输入111
# XPATH高级定位
7、XPATH: 定位xpath表达式
方式一:复制得到xpath表达式,在开发者工具中右键复制xpath表达式
driver.find_element(By.XPATH,'/html/body/div[7]/div[2]/div[4]/div/div/form/table/tbody/tr[3]/td[2]/input[3]').click()
#点击一个元素(这个目标元素是“询问”后的单选按钮)
方式二:自己书写xpath表达式(需要熟悉xpath表达式的语法)
绝对路径xpath:以/开头,从html这个根节点(最顶层节点)开始描述路径。---不容易后期维护,所以建议少用!
/html/body/div[7]/div[2]/div[4]/div/div/form/table/tbody/tr[3]/td[2]/input[3]
相对路径xpath:以//开头,不从html这个根节点开始描述,从其他层次开始描述。---维护性好,建议使用!
相对路径
- //标记名
driver.find_element(By.XPATH,'//textarea').send_keys('222')
#找到标签名是textarea的文本域,输入222
- //父标记名/子标记名
driver.find_element(By.XPATH,'//form/a').click()
#点击form标记下级的a元素(当前网页里就是“高级搜索”)
- //标记名称[筛选条件]
筛选条件的多种写法常用的有:[索引号]、[@属性名="属性值"]
索引号代表同父(同级别)下同标记的兄弟节点中目标节点是第几个,这个整数从1开始排序。
driver.find_element(By.XPATH,'//form/input[1]').send_keys('100')
#向form这个父元素下级的第1个input标记的子元素(目前就是:关键字文本框)里输入100
[@属性名="属性值"] 是用属性值的精确匹配来进行元素的筛选,在xpath里属性可以是任何你在html格式的网页源代码里看到的属性,不限于id、name、class。
driver.find_element(By.XPATH,'//a[@href="pick_out.php"]').click()
#找一个href属性值等于pick_out.php的元素,点击它。注意:引号不要里外冲突!!!
[text()="文本"]:是用标记名的文本与指定文本比较来进行元素的筛选
- text()无参,可以获得<标记名……>与它自己的</标记名>之间的完整文本(元素的文本,str类型),标记名可以是任何标记名(包括a)。
driver.find_element(By.XPATH,'//a[text()="文本"]').click()
#找一个匹配文本的超级链接,点击它
[标签名="文本"]:是用标子记名的文本与指定文本比较来进行元素的筛选
driver.find_element(By.XPATH,'//a[strong="文本"]').click()
#找一个匹配strong标签的文本的超级链接,点击它
- [contains(text(),"字符串")], Xpath语法里的contains函数:用来描述包含关系。包含关系(模糊匹配)
driver.find_element(By.XPATH,'//img[contains(@src,"bnt_reg")]').click()
#找一个src属性值里包含bnt_reg的图片(img、就是“注册”这个元素),点击它driver.find_element(By.XPATH,'//a[contains(text(),"高级")]').click()
#找到文本里包含“高级”的超级链接(就是“高级搜索”),点击它
driver.find_element(By.ID, 'username').send_keys('cyan')
driver.find_element(By.NAME, 'extend_field1').send_keys('123@hotmail.com')
driver.find_element(By.LINK_TEXT, '查看购物车').click()
driver.find_element(By.XPATH, '//a[contains(@href,"register")]').click()
driver.find_element(By.XPATH, '//a[@href="user.php"]').click()
driver.find_element(By.XPATH, '//td/select/option[5]').click()
driver.find_element(By.XPATH, '//div[@class="goodsItem"]/a[1]').click()
driver.find_element(By.XPATH, '//a[text()="高级搜索"]').click()
driver.find_element(By.XPATH, '//img[@alt="夏新N7"]').click()
# CSS选择器高级定位
1、复制得到CSS选择器
开发者工具右键复制CSS选择器
CSS选择器定位语法:
driver.find_element(By.CSS_SELECTOR,'CSS选择器')
driver.find_element(By.CSS_SELECTOR,'#ECS_MEMBERZONE > a:nth-child(2) > img:nth-child(1)').click()
#点击“登录”
2、#id属性值
driver.find_element(By.CSS_SELECTOR,'#keyword')
3、.class 类名
driver.find_element(By.CSS_SELECTOR,'.go')
4、[属性名=”属性值”] ---所有属性都可用
注意:属性名前不写@
driver.find_element(By.CSS_SELECTOR,'[href="pick_out.php"]')
5、标记名 ---找该标记名的元素
driver.find_element(By.CSS_SELECTOR,'textarea')
6、组合使用上述选择条件
标记名写在开头
input.inputBg[name="user_email"][type="text"]
7、父>子 ---逐级向下查找
form>a
div>form>a
form#searchForm>a
8、祖先 后代 ---跳级向下查找(英文空格)
div#search a
9、标记名:first-child 、标记名:nth-child(索引号) 、标记名:last-child ---第几个子元素(从1开编号的整数)
div#mainNav>a:nth-child(3)
driver.find_element(By.CSS_SELECTOR,'a[href="message.php"]').click()
driver.find_elements(By.CSS_SELECTOR,'input.inputBg')[0].send_keys('vip@163.com')
list = driver.find_elements(By.CSS_SELECTOR,'input[name="msg_type"]')
a = list[2]
if not a.is_selected():
a.click();
sleep(2)
driver.find_element(By.CSS_SELECTOR,'td>input[name="msg_title"]').send_keys('维修')
driver.find_element(By.CSS_SELECTOR,'textarea').send_keys('手机坏了怎么处理?')
driver.find_element(By.CSS_SELECTOR,'input.bnt_blue_1').click()
# 小结:定位方法
- driver.find_element(By.ID,’id属性值’)
- driver.find_element(By.NAME,’name属性值’)
- driver.find_element(By.LINK_TEXT,’完整链接文本’)
- driver.find_element(By.PARTIAL_LINK_TEXT,’一部分链接文本’)
- driver.find_element(By.CLASS_NAME,’类名’)
- driver.find_element(By.TAG_NAME,’标记名’)
- driver.find_element(By.XPATH,’xpath表达式’)
- driver.find_element(By.CSS_SELECTOR,’css选择器’)