class 第一个元素_第二章(第3节):网页元素定位和操作
大家仔細思考一下,我們用 selenium 操控瀏覽器是什么意思,其實就是用 selenium 模擬人上網,也就是說人用瀏覽器能做的任何事情,我們用 selenium 都可以做,selenium 就如一個會上網的機器人一樣。
上節課我們只是簡單的學習了用 selenium 打開瀏覽器并做了對瀏覽器做了一些簡單的操作,大家要知道,我們上網更重要的是對網頁做操作,也就是對網頁中的控件做操作,想對這些控件做操作,首先,我們就需要先找到它們。
selenium 定位方法
Selenium 提供了 8 種定位方式。
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
這8種定位方式在 Python selenium 中所對應的方法為:
- find_element_by_id()
- find_element_by_name(),find_elements_by_name()
- find_element_by_class_name(),find_elements_by_class_name()
- find_element_by_tag_name(),find_elements_by_tag_name()
- find_element_by_link_text(),find_elements_by_link_text()
- find_element_by_partial_link_text(),find_elements_by_partial_link_text()
- find_element_by_xpath(),find_elements_by_xpath()
- find_element_by_css_selector(),find_elements_by_css_selector()
我們發現除了根據 id 定位之外,剩下的 7 中方法都提供兩個函數,兩個函數唯一的區別是在單詞 element 后面多了一個 s 表示復數,帶 s 的函數是定位一組元素的寫法(也就是找到符合條件的所有元素,結果為一個數組)。因為網頁中元素的 id 是唯一的(當然如果你非要多個元素同用一個 id 名,只有第一個元素的 id 有效),所以沒有 find_elements_by_id 這種查找方法。
定位方法的用法
假如我們有一個 Web 頁面,通過前端工具(按 F12)查看到一個元素的屬性是這樣的,我們現在使用以上 8 種方法去查找元素,我們用單一元素定位的函數,對于一組元素定位的函數使用,大家自行寫代碼做實驗。
<html> <head> <body link="#0000cc"> <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新聞</a> <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a> <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})"> <form id="form" class="fm" name="f" action="/s"><span class="soutu-btn"></span><input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">我們的目的是要定位 input 標簽的輸入框。
dr.find_element_by_id("kw") # 通過 id 定位dr.find_element_by_name("wd") # 通過name定位dr.find_element_by_class_name("s_ipt") # 通過class name定位dr.find_element_by_tag_name("input") # 通過tag name定位''' 通過 xpath 定位,xpath 定位有N種寫法,這里列幾個常用寫法 ''' dr.find_element_by_xpath("//*[@id='kw']") dr.find_element_by_xpath("//*[@name='wd']") dr.find_element_by_xpath("//input[@class='s_ipt']") dr.find_element_by_xpath("/html/body/form/span/input") dr.find_element_by_xpath("//span[@class='soutu-btn']/input") dr.find_element_by_xpath("//form[@id='form']/span/input") dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")''' 通過 css 定位,css 定位有N種寫法,這里列幾個常用寫法 ''' dr.find_element_by_css_selector("#kw") dr.find_element_by_css_selector("[name=wd]") dr.find_element_by_css_selector(".s_ipt") dr.find_element_by_css_selector("html > body > form > span > input") dr.find_element_by_css_selector("span.soutu-btn> input#kw") dr.find_element_by_css_selector("form#form > span > input")接下來,我們根據頁面上的 a 標簽的鏈接文本進行定位。
dr.find_element_by_link_text("新聞") # 通過 link text 定位 dr.find_element_by_link_text("hao123") # 通過 link text 定位dr.find_element_by_partial_link_text("新") # 通過 link text 部分內容定位 dr.find_element_by_partial_link_text("hao") # 通過 link text 部分內容定位 dr.find_element_by_partial_link_text("123") # 通過 link text 部分內容定位輸入和點擊
我們已經學習了定位元素,定位只是第一步,定位之后需要對這個元素進行操作,或單擊(按鈕)或輸入(輸入框),下面就來認識 WebDriver 中最常用的幾個方法:
from selenium import webdriverdriver = webdriver.Chrome() driver.get("https://www.baidu.com")driver.find_element_by_id("kw").clear() # 清除文本 driver.find_element_by_id("kw").send_keys("selenium") # 模擬按鍵輸入 driver.find_element_by_id("su").click() # 單擊元素driver.quit()提交
submit()方法用于提交表單。例如,在搜索框輸入關鍵字之后的“回車” 操作,就可以通過該方法模擬。
from selenium import webdriverdriver = webdriver.Chrome() driver.get("https://www.baidu.com")search_text = driver.find_element_by_id('kw') search_text.send_keys('selenium') search_text.submit()driver.quit()注意:有時候 submit() 可以與 click() 方法互換來使用,submit() 同樣可以提交一個按鈕,但 submit() 的應用范圍遠不及 click() 廣泛。
其他常用方法
from selenium import webdriverdriver = webdriver.Chrome() driver.get("http://www.baidu.com")# size 屬性:獲得輸入框的尺寸 tagsize = driver.find_element_by_id('kw').size print(tagsize) # 輸出:{'width': 500, 'height': 22}# text 屬性:獲取元素的文本 tagtext = driver.find_element_by_id("cp").text print(tagtext) # 輸出:?2015 Baidu 使用百度前必讀 意見反饋 京 ICP 證 030173 號# get_attribute(name) 方法:返回元素的屬性值,可以是 id、 name、 type 或其他任意屬性 attribute = driver.find_element_by_id("kw").get_attribute('type') print(attribute) # 輸出:text# is_displayed() 方法:返回元素的結果是否可見,返回結果為 True 或 False result = driver.find_element_by_id("kw").is_displayed() print(result) # 輸出:Truedriver.quit()執行上面的程序并查看結果:size 方法用于獲取百度輸入框的寬、高;text 方法用于獲得百度底部的備案信息;get_attribute() 用于獲得百度輸入的 type 屬性的值;is_displayed() 用于返回一個元素是否可見,如果可見則返回 True,否則返回 False。
閱讀原文:
網頁元素定位和操作?www.birdpython.com總結
以上是生活随笔為你收集整理的class 第一个元素_第二章(第3节):网页元素定位和操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 5.6 root密码_MyS
- 下一篇: mysql中uuid的写法_MySQL