Python Selenium Webdriver 元素定位
一、简单介绍:
1、webdriver属于selenium体系中设计出来操作浏览器的一套API,webdriver是python的一个用于实现web自动化的第三方库;
2、自动化要做的就是迷你鼠标和键盘来操作这些元素,比如点击、输入等,操作这些元素,必须先找到它们,所以webdriver中提供了8种元素定位的方法:
find_element_by_id
find_element_by_name
find_element_by_class_name
find_element_by_tag_name
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_xpath
find_element_by_css_selector
二、元素定位操作方法
1、以百度网页举例,首页打开百度网页;
2、鼠标右键选择“检查(N)”,就可以查看到html格式的网页
3、点击html页面左上角的三角形,然后再移动鼠标对应的按钮或输入框,就可以查看到每个按钮或输入框或其它空间所对应的id和name等相关信息了
三、元素定位解析及举例
1、id定位
说明:webdriver提供的id定位的方法是通过元素的id属性来查找元素的
方法:find_element_by_id
举例:通过id定位“百度一下”按钮
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("中国")
driver.find_element_by_id("su").click()
2、name定位
说明:webdriver提供的name定位的方法是通过元素的name名称来查找元素的
方法:find_element_by_name
举例:通过name定位百度输入框
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_name("wd").send_keys("python")
driver.find_element_by_id("su").click()
3、class_name定位
说明:通过元素类名定位元素
方法:find_element_by_class_name
举例:元素类名定位百度输入框
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_class_name("s_ipt").send_keys("selenium")
driver.find_element_by_id("su").click()
4、tag_name定位
说明:每个元素本质就是一个tag,但是HTML页面的tag重复性较高,一般很少用这个定位。
方法:find_element_by_tag_name
举例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_tag_name("input")
driver.find_element_by_id("su").click()
5、link_text定位
说明:link_text定位专门用来定位文本链接的
方法:find_element_by_link_text
举例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_link_text("新闻").click()
driver.back()
driver.find_element_by_link_text("hao123").click()
driver.back()
driver.find_element_by_link_text("地图").click()
driver.back()
driver.find_element_by_link_text("视频").click()
driver.back()
driver.find_element_by_link_text("贴吧").click()
driver.back()
driver.find_element_by_link_text("学术").click()
driver.back()
driver.find_element_by_link_text("更多产品").click()
driver.close()
6、partial_link_text定位
说明:partial_link_text定位是对link定位的一种补充,有些文本很长,这个时候我们可以取文本的一部分定位
方法:find_element_by_partial_link_text()
举例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
try:
driver.find_element_by_partial_link_text("主页").click()
print('test pass: element found by partial link text')
except Exception as e:
print("Exception found", format(e))
7、xpath定位
说明:绝对路径定位,利用元素属性定位,层级与属性结合,通过逻辑运算符定位
方法:find_element_by_xpath()
举例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("//*[@id='kw']").send_keys("by_xpath")
driver.find_element_by_xpath("//*[@name='wd']").send_keys("by_xpath")
driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys("by_xpath")
driver.find_element_by_id("su").click()
8、css定位
说明:css使用选择器来为页面元素绑定属性
方法:find_element_by_css_selector()
举例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_css_selector("[ maxlength='255']").send_keys("八仙过海,各显神通")
driver.find_element_by_css_selector("[ value='百度一下']").click()