定位方式取舍
# 唯一定位方式、多属性定位、层级+角标定位(离目标元素越近,相对定位越好)
# 推荐用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")>]