selenium元素定位

selenium元素定位

  • selenium定位有八种方式,id、name、class、tag、link_text、partial_link_text、css、xpath
  • 八种定位方式各有两个方法
    • find_element_by_方式,定位单个元素的。
    • find_elements_by_方式,定位多个元素的

一、id定位

HTML页面中id是唯一的,所以当要定位的元素有id时,定位十分方便

find_element_by_id()

例:

#!/usr/bin/python3
# -*- condig:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
chrome = webdriver.Chrome()
chrome.get('https://www.baidu.com/')
chrome.find_element_by_id('kw').send_keys('selenium') #使用id属性定位到百度输入框框,并输入’selenium‘
chrome.find_element_by_id('su').click() #使用id属性到百度一下按钮,点击
time.sleep(30)

二、name定位

HTML页面中元素的名称可以不是唯一的,如果在页面中要定位的元素元素名称唯一则可以使用name定位,如果不唯一,需要配合其它因素定位定位或使用其它定位方法

find_element_by_name()

例:

#!/usr/bin/python3
# -*- condig:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
chrome = webdriver.Chrome()
chrome.get('https://www.baidu.com/')
chrome.find_element_by_name('wd').send_keys('selenium') #使用name属性定位到百度输入框框,并输入’selenium‘
chrome.find_element_by_id('su').click() #‘百度一下’按钮没有name属性
time.sleep(30)

三、class定位

classs定位与name定位相同,在HTML页面可以不唯一

例:

find_element_by_class_name()

#!/usr/bin/python3
# -*- condig:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
chrome = webdriver.Chrome()
chrome.get('https://www.baidu.com/')
chrome.find_element_by_class_name('s_ipt').send_keys('selenium') #定位到百度输入框框,并输入’selenium‘
# chrome.find_element_by_class_name("bg s_btn").click() #无法用class定位到’百度一下‘按钮
chrome.find_element_by_id('su').click()
time.sleep(30)

四、tag定位

根据标签名定位
因为一个html页面中相同的标签名太多了,所以不常用

用来定位文本超链接,一般为(href="********************")

例:

find_element_by_link_text()

# -*- condig:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
chrome = webdriver.Chrome()
chrome.get('https://www.baidu.com/')
chrome.find_element_by_link_text('贴吧').click() #定位到’贴吧‘超链接
time.sleep(30)

用文本链接中的一部分定位

例:通过“贴”字 定位到’贴吧‘超链接

#!/usr/bin/python3
# -*- condig:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
chrome = webdriver.Chrome()
chrome.get('https://www.baidu.com/')
chrome.find_element_by_partial_link_text('贴').click() #通过“贴”字 定位到’贴吧‘超链接
time.sleep(30)

七、xpath定位

selenium定位元素众多方法中,像是通过id、name、class_name、tag_name、link_text等等这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性,其次元素的id属性也不一定是固定不变的。所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了。  

xpath菜鸟教程
python+selenium基础之XPATH定位(第一篇)
python+selenium基础之XPATH轴定位(第二篇)
在浏览器可以直接获取到元素的xpath  

验证自己洗的xpath是否正确
有时从浏览器复制到的xpath是绝对路径会很长,需要自己改写为相对路径后要验证一下自己写的xpath是否能准确定位到目标元素

在目标页面按下"F12"
鼠标在浏览器控制台"CTRL+F"
在左下角的搜索框输入xpath看是否能定位到目标元素

八、css定位

由于xpath基本能解决各种定位需求,所有css未深入学习(后续会补充学习)
参考

原文地址:https://www.cnblogs.com/jingxindeyi/p/13022365.html