定位方式取舍
# 唯一定位方式、多属性定位、层级+角标定位(离目标元素越近,相对定位越好)
# 推荐用css selector(很少用递进层次的定位)
# 什么时候用xpath呢? 当你定位元素时,必须要用角标定位才可以确立唯一时,可以选用xpath
selenium提供18种定位方式,其中包含8种单数 8种复数 2种父类写法
获取标签元素的8种单数方式如下:
(element是单数,elements是复数)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('http://ui.imdsx.cn/uitester')
# 最大化窗口
driver.maximize_window()
# 将屏幕滚动定位到最上方
js = 'window.scrollTo(0,0);'
driver.execute_script(js)
# 停顿2秒后再进行操作
time.sleep(2)
#####################################
# 通过ID定位目标元素
driver.find_element_by_id('i1')
# 通过className定位目标元素
driver.find_element_by_class_name('c1')
# 通过name属性定位目标元素
driver.find_element_by_name('n1')
# 通过Xpath定位目标元素
driver.find_element_by_xpath('//*[@id="i1"]').send_keys('这是在输入框内输入的文本信息')
# 通过css Selector定位目标元素
element=driver.find_element_by_css_selector('input[placeholder="请通过CSS SELECTOR定位元素"]')
element.send_keys('111')
# 通过标签名称定位(注:在一个页面中,标签一定会重复,所以不用这个来进行定位)
# 默认写在多个相同标签的第一个里面
driver.find_element_by_tag_name('input').send_keys('111')
# 通过标签中的文本查找元素
driver.find_element_by_link_text('跳转大师兄博客地址').click()
# 通过标签中文本的模糊匹配查找
driver.find_element_by_partial_link_text('大师兄').click()
# 单数的父类,是上面8种单数方式的底层封装。参数化的一种调用方式而已。
driver.find_element()
获取标签元素的复数方式和单数方式是一一对应的,由于复数形式,返回的是list,使用不方便,不知道要取哪个值,所以实际运用中并不常用
举一个例子:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://ui.imdsx.cn/html')
js = 'window.scrollTo(0,1800);'
driver.execute_script(js)
elements = driver.find_elements_by_css_selector('select')
print(elements)
输出结果如下:
[<selenium.webdriver.remote.webelement.WebElement (session="f4e11718e43e6bd3415e10c0e43998e0", element="0.9816753200516803-1")>, <selenium.webdriver.remote.webelement.WebElement (session="f4e11718e43e6bd3415e10c0e43998e0", element="0.9816753200516803-2")>, <selenium.webdriver.remote.webelement.WebElement (session="f4e11718e43e6bd3415e10c0e43998e0", element="0.9816753200516803-3")>, <selenium.webdriver.remote.webelement.WebElement (session="f4e11718e43e6bd3415e10c0e43998e0", element="0.9816753200516803-4")>]