from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 通过id属性定位
el1 = driver.find_element_by_id("kw")
print(el1)
# 通过name属性定位
el2 = driver.find_element_by_name("wd")
print(el2)
# 通过class属性定位
el3 = driver.find_element_by_class_name('s_lit')
print(el3)
# 通过标签名定位
# 使用标签名定位元素,必须保证标签名是唯一的
el4 = driver.find_element_by_tag_name('form')
print(el4)
# 通过链接文本定位
el5 = driver.find_element_by_link_text('新闻')
print(el5)
# 通过部分链接文本定位
el6 = driver.find_element_by_partial_link_text('hao')
print(el6)
# 通过css定位
# 1.css结合基本属性定位
"""
css+id定位:driver.find_element_by_css_selector('#id值')
css+class定位:driver.find_element_by_css_selector('.class值')
css+标签名:driver.find_element_by_css_selector('标签名')
"""
el7 = driver.find_element_by_css_selector('#kw')
print(el7)
el8 = driver.find_element_by_css_selector('.s_ipt')
print(el8)
el9 = driver.find_element_by_css_selector('form')
print(el9)
# 2.css结合其他属性定位
"""
css+其他属性:driver.find_element_by_css_selector("[属性名=属性值]")
css+多个其他属性:driver.find_element_by_css_selector("[属性名1=属性值1][属性名2=属性值2]")
"""
el10 = driver.find_element_by_css_selector("[name = 'wd']")
print(el10)
# 3.css标签结合其他属性定位
"""
标签+id属性定位:driver.find_element_by_css_selector('标签名#id')
标签+class属性定位:driver.find_element_by_css_selector('标签.class值')
标签+其他属性定位:driver.find_element_by_css_selector('标签名[属性名=属性值]')
"""
el11 = driver.find_element_by_css_selector('input#kw')
print(el11)
el12 = driver.find_element_by_css_selector('input.s_ipt')
print(el12)
el13 = driver.find_element_by_css_selector("input[属性名=属性值]")
print(el13)
# 4.css层级定位
"""
driver.find_element_by_css_selector('标签1>标签2')
"""
el14 = driver.find_element_by_css_selector("form[id='form']>span>input")
print(el14)
# 5.css索引定位
"""
正着数第n个标签:driver.find_element_by_css_selector('标签:nth-child(n)')
倒着数第n个标签:driver.find_element_by_css_selector('标签:nth-last-child(n)')
"""
el15 = driver.find_element_by_css_selector("div[id = 's-top-left']>a:nth-child(3)")
print(el15)
el16 = driver.find_element_by_css_selector("div[id = 's-top-left']>a:nth-last-child(3)")
print(el16)
# 6.css模糊匹配
"""
1.属性值由多个空行隔开,匹配其中一个值的方法
driver.find_element_by_css_selector("[属性名~='部分属性值']")
2.匹配字符串开头
driver.find_element_by_css_selector("[属性名^='属性值开头']")
3.匹配字符串结尾
driver.find_element_by_css_selector("[属性名$='属性值结尾']")
"""
el17 = driver.find_element_by_css_selector("input[class~='s_btn']")
print(el17)
el18 = driver.find_element_by_css_selector("input[class^='bg']")
print(el18)
el19 = driver.find_element_by_css_selector("input[class$='s_btn']")
print(el19)
# 通过xpath表达式定位
# 1.xpath结合属性定位
"""
单个属性定位:driver.find_element_by_xpath(".//input[@id='kw']")
多个属性定位:driver.find_element_by_xpath(".//input[@id='kw' and @name='wd']")
"""
el20 = driver.find_element_by_xpath(".//input[@id='kw']")
print(el20)
el21 = driver.find_element_by_xpath(".//input[@id='kw' and @name='wd']")
print(el21)
# 2.xpath结合文本定位
"""
driver.find_element_by_xapth(".//a[text()='新闻']")
"""
el22 = driver.find_element_by_xpath(".//span[text()='换一换']")
print(el22)
# 3.xpath层级定位
"""
由上到下的层级关系:driver.find_element_by_xpath(".//form[@id='form']/span/input")
父子元素定位:driver.find_element_by_xpath(".//input[@class='s_ipt']/parent::span")
哥哥元素定位:driver.find_element_by_xpath(".//input[@class='s_ipt']//preceding-sibling::span")
弟弟元素定位:driver.find_element_by_xpath(".//input[@class='s_ipt']//following-sibling::span")
"""
el23 = driver.find_element_by_xpath(".//form[@id='from']/span/input")
print(el23)
el24 = driver.find_element_by_xpath(".//input[@class='s_ipt']/parent::span")
print(el24)
el25 = driver.find_element_by_xpath(".//input[@class='s_ipt']//preceding-sibling::span")
print(el25)
el26 = driver.find_element_by_xpath(".//input[@class='s_ipt']//following-sibling::span")
print(el26)
# 4.xpath索引定位
"""
根据索引选择标签:driver.find_element_by_xpath(".//div[@id='s-top-left']/a[1]")
最后一个标签:driver.find_element_by_xpath(".//div[@id='s-top-left']/a[last()]")
倒数第二个标签:driver.find_element_by_xpath(".//div[@id='s-top-left']/a[last()-1]")
"""
el27 = driver.find_element_by_xpath(".//div[@id='s-top-left']/a[1]")
print(el27.text)
el28 = driver.find_element_by_xpath(".//div[@id='s-top-left']/a[last()]")
print(el28.text)
el29 = driver.find_element_by_xpath(".//div[@id='s-top-left']/a[last()-1]")
print(el29.text)
# 5.xpath模糊匹配
"""
匹配开头:driver.find_element_by_xpath(".//span[starts-with(@class,'soutu-hover')]")
匹配结尾:driver.find_element_by_xpath(".//span[ends-with(@class,'hover-tip')]")
注:end-with是xpath2.0的语法,可能你的浏览器还只支持1.0的语法
包含匹配:driver.find_element_by_xpath(".//span[contains(@value,'度一')]")
"""
el30 = driver.find_element_by_xpath(".//span[starts-with(@class, 'soutu-hover')]")
print(el30)
el31 = driver.find_element_by_xpath(".//span[ends-with(@class, 'hover-tip')]")
print(el31)
el32 = driver.find_element_by_xpath(".//input[contains(@value, '度一')]")
print(el32)