HTML标签
- 组成部分分为三个:标签名称(TagName)、属性(Attribute)、文本(Text)
- 常见标签名称:a/div/span/i/tr/td/input/p/form/…
- 元素的形态不要相信肉眼所见,要基于元素的属性来决定。
- 文本并不是每一个标签都具有的东西
八种元素定位法则
- 任何定位方法,都是为了准确定位到指定的元素,所以在选择定位方法的时候,必须要去校验你的定位方法是否正确及准确。
id | ID就相当于身份证号码。一般而言是不会重复的 |
---|---|
name | 基于Name属性去定位 |
class | 基于元素的class属性去进行定位 |
tag name | 基于标签名称来进行元素定位,不推荐,重复率高 |
link text | 基于a标签的text内容 |
partial link text | 基于a标签的text内容进行模糊查找 |
xpath | 基于html结构来对元素进行定位 |
css selector | 基于css样式来对元素进行定位,速度快 |
定义浏览器
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
- 通过id或name属性定位,方法见代码注释
# ID定位:在元素具备有ID的属性时,可以通过ID去进行定位。ID就相当于身份证号码。一般而言是不会重复的。
driver.find_element('id', 'su')
# Name定位:在元素具备有Name属性时,通过Name属性去定位。重复的概率相对而言还是可能存在的。类似于身份证上的名字
driver.find_element('name', 'rn')
- 通过link text定位元素和partial link text定位
# Link Text:针对于a标签来实现的定位,定位条件是a标签的text内容
driver.find_element('link text', '新闻').click()
# Partial Link Text: 针对于A标签来实现的定位,是基于a标签的text内容进行模糊查找。类似于sql中的like
els = driver.find_element('partial link text', '使用百度')
- 通过class name或tag name定位
# ClassName定位,基于元素的class属性去进行定位,不推荐使用,如果class值只有一个,可以考虑使用,但是要避免重复
el = driver.find_element('class name', 'bg s_ipt_wr new-pmd quickdelete-wrap ipthover')
# TagName定位:测试用不上,一般是在爬虫的时候应用,基于标签名称来进行元素定位
els = driver.find_elements('tag name', 'input')
- 通过CSS定位元素
# CSS Selector元素定位:万金油型的元素定位。原理就是基于css样式来对元素进行定位。也是传说中定位最快的方法。
driver.find_element('css selector', '#kw').send_keys('#kw')
- 通过xpath定位
绝对路径
# Xpath元素定位:定位界的万金油,原理是基于html结构来对元素进行定位,类似于操作系统下的文件管理系统
# 绝对路径:不到穷途末路之时,不要使用这个定位方法
/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
相对路径
相对路径:元素的查询功能,通过右键copy,copy xpath获取元素的相对路径(此方法不推荐),一般都是通过手写xpath的形式
//*[@id="kw"]
-
xpath元素定位语法规则:
-
语法//*[@id=“kw”] 表示从根路径下开始查找任意一个元素,该元素具备有id属性,且属性值为kw
-
// 表示从根路径下开始查找*表示任意元素也可以直接输入标签名称,用于指定某一个类型的元素
-
[] 表示添加筛选条件
-
@ 表示基于属性来进行查找
-
id表示属性的名称
-
kw表示属性的值
-
text()表示基于文本来定位
-
[contains()] 表示调用contains函数,进行内容的模糊查找
-
/following-sibling:😗 选取当前节点之后的所有同级节点
-
/… 表示当前节点的父节点
-
xpath手写的方式,除去避免绝对路径以外,还可以避 免动态元素导致的元素定位失败伪元素:正常定位即可