022、xpath 定位01:基础语法
一、xpath 定位基础语法
Xpath定位 3 种形式:
1、@属性定位
2、父子层级定位
3、索引 :索引是从下标1开始
*匹配任意标签 , // 表示相对路径;
/:子节点 // :相对节点 。
1、@属性定位 (属性定位,用@)
<input name="username" id="username" type="text" value="" placeholder="请输入您的邮箱地址">
//*[@name="username"] , // 表示相对路径,* 代表所有标签,属性 name 用@
//*[@name="username"], 表示的意思是:用相对路径,从所有标签种,找到含有name="username"的元素;
示例代码如下:
# -*- coding:utf-8 -*-
# Author: Sky
# Email: 2780619724@qq.com
# Time: 2021/8/19 22:41
# Project: day01
# Module: study_23.py
# Environment: Python3.8.6 , Selenium3 环境 ( 3.141.0 版本)
# Environment: Chrome ( 92.0.4515.131, 正式版本) + chromedriver(92.0.4515.107版本)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://49.235.92.12:8200/users/login/")
time.sleep(3)
# //*[@name="username"] , // 表示相对路径,* 代表所有标签,属性 name 用@
# //*[@name="username"],表示的意思是:用相对路径,从所有标签种,找到含有name="username"的元素;
# xpath 定位, name 属性
# 输入用户名
driver.find_element_by_xpath('//*[@name="username"]').send_keys("112233456@qq.com")
# xpath 定位, id 属性
# 输入密码
driver.find_element_by_xpath('//*[@id="password_l"]').send_keys("123456")
# xpath 定位, type 属性
driver.find_element_by_xpath('//*[@type="submit"]').click()
# xpath 定位, placeholder 属性
# driver.find_element_by_xpath('//*[@placeholder="请输入您的邮箱地址"]').send_keys("1234@qq.com")
driver.quit()
2、父子层级定位
如果一个元素,无法直接定位,可以先定位它的父元素 。 /:子节点 // :相对节点 。
示例代码如# -*- coding:utf-8 -*-
# Author: Sky # Email: 2780619724@qq.com # Time: 2021/8/19 22:41 # Project: day01 # Module: study_23.py # Environment: Python3.8.6 , Selenium3 环境 ( 3.141.0 版本) # Environment: Chrome ( 92.0.4515.131, 正式版本) + chromedriver(92.0.4515.107版本) from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://49.235.92.12:8200/users/register/") time.sleep(3) # 父子元素定位 # / 表示 层级关系, a[3] 表示第3个标签a元素 # driver.find_element_by_xpath('//*[@class="form-p"]/a[3]').click() # 先到注册页面 # driver.find_element_by_xpath('//*[@class="form-p"]/a[1]').click() # / 表示 层级关系 # 有多个input,没索引时,默认取值 input[1]
#Xpath的索引是从下标1开始
driver.find_element_by_xpath('//*[@id="email_register_form"]/div[1]/input').send_keys("1235@qq.com") # 相对节点 // ,表示在这个范围内。 # //*[@id="email_register_form"]//*[@type="password"] 的意思是: # 用相对路径,查找所有标签中 @id="email_register_form" 的元素,找到该元素后,再在该元素里,相对路径查找 所有标签中 @type="password" 的元素 driver.find_element_by_xpath('//*[@id="email_register_form"]//*[@type="password"]').send_keys("123456") time.sleep(3) driver.quit()