龙空技术网

selenium 元素定位

我饿了设计师 102

前言:

如今咱们对“seleniumcss”大约比较关切,咱们都想要知道一些“seleniumcss”的相关资讯。那么小编在网上汇集了一些对于“seleniumcss””的相关文章,希望咱们能喜欢,姐妹们一起来学习一下吧!

from selenium import webdriverimport os,timefrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.by import Bydriver_path = os.path.join(os.path.abspath(__file__),'../../driver/chromedriver.exe')driver = webdriver.Chrome(executable_path=driver_path)driver.get(';)driver.maximize_window()#1.通过id定位driver.find_element(By.ID,"kw").send_keys("selenium id 定位")#2.通过name定位driver.find_element(By.NAME,"wd").send_keys("selenium name 定位")#3.通过class_name 定位driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("selenium class_name 定位")#4.通过 tag_name 定位,是最不准的定位,因为一个网上上同一个tag那么重复的可能性很大driver.find_element(By.TAG_NAME,"input").send_keys("selenium tag_name 定位")#5.通过link_text 定位driver.find_element(By.LINK_TEXT,"新闻").click()#6.通过partial_link_text 定位driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()#7.通过css定位# 7.1 绝对路径是从网页的根节点html开始,逐层去查找需要定位的元素。# 此方法缺点显而易见,当页面元素位置发生变化时,都需要修改,因此不推荐driver.find_element(By.CSS_SELECTOR,'html body div#wrapper div#head div.head_wrapper div.s_form div.s_form_wrapper.soutu-env-mac.soutu-env-index form#form span.bg.s_ipt_wr.quickdelete-wrap input#kw').send_keys('selenium css 绝对路径定位')# 备注:当同一层次有多个相同的元素时,使用id或class区分,遇到id用#号,遇到class用.# 7.2 通过相对路径,相对路径表示文件中所有符合模式的元素都会被选出来,即使是处于不同的层级也会被选出来。driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('selenium css 相对定位1')driver.find_element(By.CSS_SELECTOR,'input#kw').send_keys('selenium css 相对定位2')# 7.3 使用元素属性爹娘各位# 元素属性定位要求属性能够定位唯一一个元素,如果存在多个相同标签# 默认第一个,具体格式 //标签名[属性 = ‘属性值’],支持使用多个属性一起定位元素driver.find_element(By.CSS_SELECTOR,'input[name="wd"]').send_keys('selenium css 属性值定位')driver.find_element(By.CSS_SELECTOR,'input[name="wd"][class="s_ipt"]').send_keys('selenium css 多属性值定位')# 7.4 使用部分属性值匹配(也称为模糊方法定位)# 属性值如果太长或网页中的元素属性动态变化,可以使用此方法# 元素属性值开头包含内同: ^=driver.find_element(By.CSS_SELECTOR,'a[href^=";]').click()#元素属性值结尾包含内容: $=driver.find_element(By.CSS_SELECTOR,'a[href$="news.baidu.com"]').click()#圆度属性driver.find_element(By.CSS_SELECTOR,'a[href*="news"]').click()# 7.5查询子元素# 1)子元素 A>Bdriver.find_element(By.CSS_SELECTOR,'form>span>input').send_keys('css 子元素定位')# 2)后代元素 A空格B (类似 >)driver.find_element(By.CSS_SELECTOR,'form span input').send_keys('后代元素')# 3)第一个后代元素: first-childdriver.find_element(By.CSS_SELECTOR,'a#s-top-username a:first-child').click()# 4)最后一个后代元素a = driver.find_element(By.CSS_SELECTOR,'div#u1 a:last-child')# 5)第n个元素: nth-childdriver.find_element(By.CSS_SELECTOR,'div#u1 a:nth-child(3)').click()# 7.6查询兄弟元素# 1)同层级下一个元素  +driver.find_element(By.CSS_SELECTOR,'div#u1 a+a')# 2)选择同层级多个相同标签的元素driver.find_element(By.CSS_SELECTOR,'div#u1 a ~ a')#8.通过xpath 定位,xpath 常用有6中定位元素方法# 8.1 绝对路径,角度路径的开头是一个斜线(/),从网页的根节点html开始,逐层去查找需要定位#的元素。driver.find_element(By.XPATH,'/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input').send_keys('xpath 绝对路径定位')#备注:当同一个层次有多个相同的元素时,使用下标区分,下标从1开始。# 8.2 相对路径的开头是两个斜线(//),表示文件中所有符合模式的元素都会被找到,即使是处于树# 中不通的层级也会被选出来。driver.find_element(By.XPATH,'//form/span[1]/input').send_keys('selenium xpath 相对路径定位1')driver.find_element_(By.XPATH,'//span[1]/input').send_keys('selenium xpath 相对路径定位2')# 备注:以上都可以定位到百度搜索框,相对路径的长度和开始位置并不受限制,可以采用从后往前逐级定位#直到定位到即可的方式去定位。# 8.3 元素索引,遇到同层级相同标签元素时,可以使用索引(下标)表示,缩影的初始值为1driver.find_element(By.XPATH,'//div/div[3]/a[2]').click()# 8.4 元素属性,要求属性能够定位到唯一一个元素,如果存在多个相同标签,默认定位第一个,#具体隔离 //标签名[@属性="属性值"] 支持使用 and 和 or 关键字,多个属性一起定位driver.find_element(By.XPATH,'//a[@href=";]').click()driver.find_element(By.XPATH,'//a[@href="; or @class="mnav c-font-normal c-color-t"] ').click()driver.find_element(By.XPATH,'//a[@href="; and @target="_blank"]').click()# 8.5 元素部分属性值(也称为模糊方法定位)#属性值如果太长活网页中的元素属性动态变化,可以使用此方法# (1)元素属性值开头包含内容: start-with()driver.find_element(By.XPATH,"//a[start-with(@name,'')]").click()#(2)元素属性值结尾包含内容substring()driver.find_element(By.XPATH,"//a[substring(@href,9)='123']").click()# (3)containsdriver.find_element(By.XPATH,"//a[contains(@href,'hao')]").click()# 8.6 元素文本在xpath中可以通过text()函数获取,也可以用其来进行元素定位。driver.find_element(By.XPATH,'//a[text()="新闻"]').click()driver.find_element(By.XPATH,'//a[contains(text(),"新")]').click()time.sleep(3)driver.quit()

标签: #seleniumcss #html子元素