自动化的定位方式有8种:
locate_types = {
"id" : By.ID,
"name" : By.NAME,
"tag_name" : By.TAG_NAME,
"class_name" : By.CLASS_NAME,
"link_text" : By.LINK_TEXT,
"xpath" : By.XPATH,
"partial_link_text": By.PARTIAL_LINK_TEXT,
"css_selector": By.CSS_SELECTOR
}
ele = driver.find_element_by_id(“kw”) #找到id = kw的一个元素
#ele1= driver.find_elements_by_id(“kw”) #找到id = kw的所有的元素,返回一个列表
driver.find_element_by_name(“phone”) #找一个单一的元素,从上放下,找到符合条件的第一个
driver.find_elements_by_name(“phone”) #找到所有匹配的元素,返回一个列表
driver.find_element_by_class_name()
driver.find_elements_by_class_name()
driver.find_element_by_tag_name(“lgfff”)
driver.find_elements_by_tag_name(“lgfff”)
driver.find_element_by_link_text(“更多产品”) #完全匹配
6 、链接元素 link_text #模糊匹配
driver.find_elements_by_partial_link_text(“更多”) #模糊匹配
xpath定位
driver.find_elements_by_xpath()
绝对定位 严格按照路径和位置来定位 以/开头 父/子关系
/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
相对定位 参照物:整个html 只要在整个页面中,找到符合属性的元素,以//开头
//*[@id=“kw”]
7.1 //标签名[@属性名=“属性值”] //input[@id=“kw”] 匹配所有 //[@id=“kw”]
driver.find_elements_by_xpath("//input[@id=“kw”]")
7.2 逻辑运算 and or //标签名[@属性名=“属性值” and @属性名=“属性值”] //input[@id=“kw” and @name=“wd”]
driver.find_elements_by_xpath("//input[@id=“kw” and @name=“wd”]")
7.3 文本定位 //标签名[text()=“文本内容”] #文本内容完全匹配 //a[text()=“新闻”]
driver.find_elements_by_xpath("//a[text()=“新闻”]")
7.4 部分匹配 文本内容/属性值 contains
//标签名[contains(text(),“部分文本内容”)] #文本内容太长 //[contains(text(),“我的”)]
//标签名[contains(@属性名,“部分属性值”)] #id(不变动+变动 如2020dhskafhald) #class 多个 //[contains(@id,“2020”)]
driver.find_elements_by_xpath("//[contains(text(),“我的”)])
7.5.1 层级定位 第一种方式 //div[@id=“ul”]//a[@name=“tj_login”]
后一个条件,是在前一个得到的结果之内去搜索的。//条件1//条件2…
7.5.2 层级定位 - 轴定位 #表达式 /轴定位名称::标签名[属性表达]
轴名称
ancestor:祖先节点,包含父节点和祖父节点
parent:父结点
preceding_sibling:当前节点标签前的所有兄弟节点
following_sibling:当前节点标签后的所有兄弟节点
following:当前节点标签后的所有节点
使用语法
/轴名称::节点名称 注:轴定位最好用单斜杠
例子
//span[text()=“哈哈”]/parent::div/following_sibling::div[@class=“attend_data_state”]//img
可以将定位到的元素赋值给一个变量,然后对元素做一些操作
a = driver.find_element_by_id('su')
print(a.text) 打印文本格式
print(a.tag name) 打印标签名
print(a.get_attribute('herf')) 获取某一个属性的值