selenium WebDriver提供的8种元素定位方法:
(1)find_element_by_id() :id 定位 ,顾名思义,就是通过标签的id属性值来定位元素
(2) find_element_by_name() :name 定位,顾名思义,就是通过标签的name属性值来定位元素
(3)find_element_by_tag_name() :tag 定位 ,通过标签名(tag name)定位,不太推荐此用法,因为一个页面会有很多相同的标签。
(4)find_element_by_class_name() :class 定位 ,顾名思义,就是通过标签的class属性值来定位元素。
(5)find_element_by_link_text() :link_text 定位 ,通过元素标签对之间的文字信息来定位元素。
(6) find_element_by_partial_link_text() :partial link 定位,是对上面link定位的补充,如果标签对之间的内容很长时,就取这部分文字的唯一标识的文字内容即可。
(7)find_element_by_xpath() :XPath 定位 ;利用元素属性定位、利用元素的绝对路径定位、利用层级与属性结合定位等
(8)find_element_by_css_selector():CSS 选择器可以较为灵活地选择控件的任意属性,一般情况下,CSS 定位速度比 XPath定位速度快。
下面以‘https://www.baidu.com/’为例写的demo:
from selenium import webdriver
import time
driver = webdriver.Chrome() # 前提:安装了谷歌浏览器和驱动
// 使用get方法,打开百度首页
driver.get('https://www.baidu.com')
# find_element_by_id()方法定位页面上的元素
# send_keys()做输入操作
# driver.find_element_by_id('kw').send_keys('selenium')
# find_element_by_name()方法定位页面上的元素
# driver.find_element_by_name('wd').send_keys('selenium')
# find_element_by_class_name()方法定位页面元素
# driver.find_element_by_class_name('s_ipt').send_keys('selenium')
# find_element_by_tag_name 通过标签名(tag name)定位百度输入框 不太推荐此用法,因为一个页面会有很多相同的标签
# driver.find_element_by_tag_name('input')
# click() 单击操作
# driver.find_element_by_id('su').click()
# find_element_by_link_text() 通过元素标签对之间的文字信息来定位元素
# driver.find_element_by_link_text('新闻').click()
# find_element_by_partial_link_text() 是对上面link的补充,如果标签对之间的内容很长时,就取这部分文字的唯一标识的文字内容即可
# driver.find_element_by_partial_link_text('新').click()
# xpath 通过元素的属性值来定位元素
# driver.find_element_by_xpath('//*[@id="kw"]').send_keys('selenium')
# driver.find_element_by_xpath('//*[@id="su"]').click()
'''
find_element_by_css_selector定位
CSS 选择器可以较为灵活地选择控件的任意属性,一般情况下,CSS 定位速度比 XPath定位速度快
css定位有很多种方法,这里就只介绍两种常用的
'''
# css定位 通过class定位
# driver.find_element_by_css_selector('.s_ipt').send_keys('selenium')
# driver.find_element_by_css_selector('.s_btn').click()
# css定位 通过id定位
driver.find_element_by_css_selector('#kw').send_keys('selenium')
driver.find_element_by_css_selector('#su').click()
# 强制等待3秒,为了看清楚执行效果
time.sleep(3)
# 通过 quit()关闭浏览器
driver.quit()
当然,除了以上的8种写法,WebDriver 还提供了另外一套写法,即统一调用find_element()方法,通过 By 来声明定位,并且传入对应定位方法的定位参数。
使用find_element()定位元素demo如下:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
'''
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,"新闻")
find_element(By.PARTIAL_LINK_TEXT,"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
'''
driver.find_element(By.ID, 'kw').send_keys('selenium')
driver.find_element(By.ID, 'su').click()
time.sleep(3)
driver.quit()