#定位优先选择1、id 2、name
#xpath优先选择属性定位,再选择文本定位
from selenium import webdriver
# 打开对应的浏览器,开启与浏览器之间的会话
#打开的是非常干净的浏览器,没有任何的用户数据
driver=webdriver.Chrome()
# 元素在页面的三种状态
# 1)存在:能够找到
# 2)可见:在浏览器呈现的页面当中,可以看到它的大小。有高和宽。
# 3)可用:特别关注输入框和按钮。
# 1)>2)>3)
driver.get("http://www.baidu.com")
#按照元素本身的特征来找
# 8个元素定位方式:1类:只根据元素的一个特征来找;2类:多种组合方式:xpath,css选择器
#id,name,className,tagName,link,partial_link
#id:固定不变,动态变化的id
ele=driver.find_element_by_id("kw")#找元素,下一步动作:操作。返回对象:WebElement(操作+属性)
# ele.send_keys()
#
#2、 tag_Name标签名称
driver.find_element_by_tag_name("input") #得到一个webElement对象 第一个
driver.find_elements_by_tag_name("input") #得到一个列表。所有匹配的元素,多个webElement对象
#3、class_name class属性
driver.find_element_by_class_name("s-top-wrap")#一个类名
driver.find_elements_by_class_name("")
#4、name属性
driver.find_element_by_name("wd")
driver.find_elements_by_name("wd")
#5.6.只针对a标签
driver.find_element_by_link_text("新闻")#精准匹配
# driver.find_elements_by_link_text("")
# driver.find_elements_by_partial_link_text()
driver.find_element_by_partial_link_text("新")#部分文本匹配
#7、xpath
#页面中ctrl+f 写xpath表达式
"""
//*[@id="kw"]
/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[1]/input
绝对定位:以/开头 完整路径,绝对下标位置
相对定位:1)相对于谁?参照物 以//开头 确认:有还是没有匹配的元素?
//标签名(一级筛选)
靠元素自己精准定位:
1、//标签名[@属性名称=值] 如://input[@id="kw"] 或者//*[@属性名称=值]
2、多个属性值定位:逻辑运算and or //标签名[@属性名称=值 and @属性名称=值]
3、文本定位:(Css不支持文本定位,只有Xpath定位有)
//标签名[text()=文本值] 如://div[@id="u1"]//a[text()="登录"]
4、包含定位:(Css不支持包含定位,只有Xpath定位有)
//标签名[contains(@属性,值)]
//标签名[contains(text(),值)] 如://h4[contains(text(),"运营")]
靠祖宗定位:
层级定位://div[@id="u1"]//a[@name="tj_login"]
轴定位:
轴运算:ancestor:祖先节点 包括父
parent:父节点 给g
preceding:当前元素节点标签之前的所有节点。(html页面先后顺序)
preceding-sibling:当前元素节点标签之前的所有兄弟节点
following:当前元素节点标签之后的所有节点。(html页面先后顺序)
following-sibling:当前元素节点标签之后的所有兄弟节点
使用语法:已知的元素/轴名称::标签名称[@属性=值]
例如://div//table//td//preceding::td
//dd[@data-val="张芝波"]/flowing-sibling::dd[contains(@class,"batscore")]/span
较多的应用场景:
页面显示为一个表格样式的数据列,需要通过组合来定位元素
//p[@title="2306"]/parent::li/following-sibling::li//p[@class="name"]
"""