1.元素定位的常用方法
1.1 根据id定位
(下图代码为定位到"http://www.baidu.com"的输入框)
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw")
1.2 根据name定位
(下图代码为定位到"http://www.baidu.com"的输入框)
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_name("wd")
1.3 根据class_name定位
(下图代码为定位到"http://www.baidu.com"的输入框)
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_class_name("s_ipt")
1.4 根据tag_name定位
因为一个页面中可能会存在多个相同的tag_name,因此会返回一个元素列表,定位其中的某个元素需要使用索引
下图代码为查出百度页面下的所有input标签,并返回每个元素的html代码
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
data = driver.find_elemrnts_by_tag_name("input")
for i in data:
print(i)
1.5 定位超链接标签 根据超链接名进行定位,只能定位超链接文本
下图代码为定位到百度首页的新闻元素
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_elemrnts_by_link_text("新闻")
如果元素名很长,可以使用模糊匹配
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_elemrnts_by_partial_link_text("新")
2.xpath定位
xpath定义:xpath是在xml文档内查找信息的语言,HTML就是标准的xml,因此在HTML中也可以使用xpath
为什么要使用xpath定位:xpath可以在元素没有id,name,class_name等属性时定位元素
2.1 标签+属性进行xpath定位
下图为定位到百度首页的搜索框位置
语法://标签名[@属性名=属性值]
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//input[@maxlength="255"]')
2.2 层级定位
语法://标签名[@属性名=属性值]/子标签 只找子标签下的
//标签名[@属性名=属性值]//子标签 找到该标签下所有符合条件的子标签
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//input[@maxlength="255"]')
2.3索引定位,索引从1开始,索引只计算同级标签
语法://标签名/子标签名[索引值]
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//form/span[1]/input')
2.4 模糊匹配
语法://标签名[contains(@属性名,部分属性值)]
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//form/span[contains(@class,"quickdelete-wrap")]/input')
2.5多条件查找
语法://标签名[属性名1=属性值1 and 属性名2=属性值2]
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//input[@type = "hidden" and @name="rn"]')
3.CSS选择器定位
css选择器是什么?
css是html的一种匹配模式,用于绑定页面样式
标签选择器,类选择器,id选择器,子选择器,包含选择器,选择器分组
为什么要使用css定位?
selenium官方推荐使用,相较于xpath速度更快,语法更简单
3.1标签+属性定位
语法:
标签名[属性名=属性值] 使用id+标签定位
#id属性值 直接使用id属性值定位
.类属性值 直接使用类属性值
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_css_selector('input[id="kw"]')
# driver.find_element_by_css_selector('#kw')
# driver.find_element_by_css_selector(".s_ipt")
3.2层级定位(注意空格和>的区别)
语法:
标签名[属性名=属性值] 子标签 会选择该标签及其子标签下的所有子标签
标签名[属性名=属性值]>子标签 会选择该标签及其子标签
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector("form[id='form'] input")
print(ele.get_attribute('outerHTML'))
3.3索引定位(注意空格和>的区别)
标签名[属性名=属性值] nth-child(索引值) 会选择该标签及其子标签下的所有子标签的所有符合索引值要求的
标签名[属性名=属性值]>nth-child(索引值) 只选择该标签下的满足索引值的标签
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector(form[id='form']>:nth-child(1))
print(ele.get_attribute('outerHTML'))
3.4 模糊匹配
语法:
标签名[属性名*=部分属性值]
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector('input[autocomplete*="of"]')
print(ele.get_attribute('outerHTML'))
3.5 多条件查找
语法:
标签名[属性名1=属性值1][属性名2=属性值2]
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector('input[type="hidden"][name="f"]')
print(ele.get_attribute('outerHTML'))