定位方式取舍
# 唯一定位方式、多屬性定位、層級+角標定位(離目標元素越近,相對定位越好)
# 推薦用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")>]
