我們在對瀏覽界面做操作時,比如點擊按鈕,搜索框輸入內容。都需要把鼠標挪過去,然后再點擊,或者輸入內容。在selenium操作時也是一樣的。需要先對元素進行定位,然后才能進行操作。可以借助瀏覽器的開發者工具(瀏覽器F12打開)來查看網頁對應的html代碼。然后進行定位。可以稍微學習HTML基礎,更容易理解。
定位方式有八種,這八種各有兩個方法,一個是find_element_by_方式,這是定位單個元素的。一個是find_elements_by_方式,這是用來定位多個元素的。
使用name屬性定位
打開谷歌瀏覽器,打開百度首頁,F12呼出開發者工具
使用左邊這個按鈕,點擊百度搜索框,會自動顯示對應HTML代碼,可以看到name=‘wd’
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_name('wd')#通過name屬性定位輸入框 test.send_keys('測試一下')#輸入測試一下
使用id屬性定位
還是以上面百度搜索框為例,id=‘kw’
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_id('kw')#通過id屬性定位輸入框 test.send_keys('測試一下')#輸入測試一下
通過id和name是比較常用和容易的定位方式。因為一般id和name元素在一個HTML文件中基本是唯一的。不過有時候前端開發也可能不寫這兩個屬性。
使用class定位
還是使用百度搜索框,class='s_ipt'
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_class_name('s_ipt')#通過classname屬性定位輸入框 test.send_keys('測試一下')#輸入測試一下
使用tagname定位
tagname其實就是HTML的標簽。不過一個HTML文件里面相同的標簽肯定很多,一般很少用到。基本都是定位父元素,然后父元素定位下面所有tagname元素。再根絕其他條件去操作。比如表格啥的。
使用link_text定位
這是用來定位文字超鏈接的,可以通過文字鏈接部分的文字描述,定位百度首頁上的新聞按鈕
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_link_text('新聞')#通過link_text定位新聞跳轉按鈕 test.click()#點擊按鈕
使用partial_link_text定位
這個也是用來定位文字超鏈接的,和link_text區別在於,這個相當於模糊搜索,只輸入部分文字描述就可以了
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_partial_link_text('新')#通過partial_link_text定位新聞跳轉按鈕 test.click()#點擊按鈕
使用xpath定位
這個百分百可以定位到,通過層級來的,感興趣可以學習下xpath的語法,不會也沒關系。還是以百度搜索框為例
對着直接右鍵copy-copy xpath
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_xpath('//*[@id="kw"]')#通過xpath定位搜索框 test.send_keys('測試一下')#輸入測試一下
使用css定位
和xpath一樣,拷貝的時候選上面的copy-selector就行
from selenium import webdriver dr = webdriver.Chrome()#初始化chrome瀏覽器實例 dr.maximize_window()#瀏覽器最大化 dr.get('https://www.baidu.com')#打開百度首頁 test = dr.find_element_by_css_selector('#kw')#通過xpath定位搜索框 test.send_keys('測試一下')#輸入測試一下