python3使用selenium上篇

selenium 是一個(gè)用于Web應(yīng)用程序測(cè)試的工具毡琉。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣摧玫。
想了解selenium發(fā)展史點(diǎn)擊一下剩膘。

實(shí)例百度搜索selenium

# 導(dǎo)入webdriver類(lèi)
from selenium import Webdriver
# 調(diào)用selenium瀏覽器驅(qū)動(dòng),獲取瀏覽器句柄
driver = webdriver.Firefox()
# 通過(guò)句柄訪問(wèn)URL
first_url = 'http://www.baidu.com'
driver.get(first_url)
# 通過(guò)句柄控制頁(yè)面元素
driver.find_element_by_id("kw").send("selenium")  # 在搜索框輸入selenium
driver.find_element_by_id("su").click()  # 單擊百度一下

環(huán)境搭建

1.安裝python3
python下載地址:https://www.pythin.org/
2.安裝selenium
cmd命令行輸入:pip install selenium

cmd命令行輸入:pip install selenium=指定版本號(hào)
pip show selenium 查看當(dāng)前包的版本信息
3.安裝瀏覽器驅(qū)動(dòng)(WebDriver)
驅(qū)動(dòng)下載地址:http://www.seleniumhq.org/download/
解壓文件衅斩,將得到的.exe文件放到python目錄下

元素定位

1. id定位
通過(guò)HTML元素的ID值定位:
find_element_by_id("id名稱(chēng)")
2. name定位
通過(guò)HTML元素的name屬性值定位:
find_element_by_name("name名稱(chēng)")
3. class定位
通過(guò)HTML元素的class值定位:
find_ement_by_class_name("class名稱(chēng)")
4. tag定位
每個(gè)一個(gè)元素本質(zhì)上也是一個(gè)tag,如:<div>怠褐、<input>畏梆、<a>等
find_element_by_tag_name("input")
5. link定位
它專(zhuān)門(mén)用來(lái)定位文本鏈接:
find_element_by_link_text("鏈接名")
6. partial link定位
parial link定位是對(duì)link定位的一種補(bǔ)充,有些文本鏈接會(huì)比較長(zhǎng)奈懒,這個(gè)時(shí)候我們可以取文本鏈接的一部分定位奠涌,只要這一部分信息可以唯一地標(biāo)識(shí)這個(gè)鏈接。
find_element_by_partial_link_text("一個(gè)很長(zhǎng)的文本鏈接")
7. XPath定位

  • 絕對(duì)路徑定位
    find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
    div[2]表示當(dāng)前層級(jí)下的第二個(gè)div標(biāo)簽
  • 元素屬性定位
    find_element_by_xpath("http://input[@id='id名稱(chēng)']")
    find_element_by_xpath("http://input[@name='name名稱(chēng)']")
    find_element_by_xpath("http://input[@class='class名稱(chēng)']")
    find_element_by_xpath("http://*[@id='id名稱(chēng)']")
    find_element_by_xpath("http://input[@type='submit']")
    find_element_by_xpath('//p[contains(text(), "問(wèn)卷")]/a')
    說(shuō)明://表示當(dāng)前頁(yè)面某個(gè)目錄下磷杏, input表示定位元素的標(biāo)簽名溜畅,[@id="id名稱(chēng)"]表示這個(gè)元素的id屬性值,如果不想指定標(biāo)簽名极祸,則可以用星號(hào)(*)代替慈格,元素的任意屬性值都可以使用,只要它能唯一的標(biāo)識(shí)一個(gè)元素遥金。
  • 層級(jí)與屬性結(jié)合
    如果一個(gè)元素本身沒(méi)有可以唯一標(biāo)識(shí)這個(gè)元素的屬性值浴捆,那么我們可以找其上一級(jí)元素,或上上級(jí)元素。
    find_element_by_xpath("http://span[@class='class名稱(chēng)']/span/input")
  • 使用邏輯運(yùn)算符
    如果一個(gè)屬性不能唯一區(qū)分一個(gè)元素稿械,我們還可以使用邏輯運(yùn)算符連接多個(gè)屬性來(lái)查找元素
    find_element_by_xpath("http://input[@id='值' and @class='值']/span/input")
  • 通過(guò)開(kāi)發(fā)這工具(F12)定位元素復(fù)制xpath絕對(duì)路徑

8. 常用css定位

選擇器 例子 描述
.class .temp class選擇器选泻,選擇class="temp"的所有元素
#id #kw id選擇器,選擇id="kw"的所有元素
* * 選擇所有元素
element input 選擇所有<input>元素
> div>input 選擇父元素為<div>的所有<input>元素美莫,父子關(guān)系
+ div+input 選擇同一級(jí)緊接在<div>元素之后的所有<input>元素 页眯,兄弟關(guān)系
[attrbute=value] [type="submit"] 選擇type="submit"的所有元素

9. 用By定位元素
針對(duì)前面介紹的8種定位方法,WebDriver還提供了另外一套寫(xiě)法厢呵,即統(tǒng)一調(diào)用find_element()方法
find_element()方法只用于定位元素餐茵,需要兩個(gè)參數(shù),第一個(gè)參數(shù)是定位的類(lèi)型述吸,第二個(gè)參數(shù)是定位的具體方式,在使用By之前需要導(dǎo)入By類(lèi)

# 導(dǎo)入By
from selenium.webdriver.common.by import By
# id定位
find_element(By.ID, "id值")
# name屬性定位
find_element(By.NAME, "name值")
# class屬性定位
find_element(By.CLASS_NAME, "class值")
# 標(biāo)簽定位
find_element(By.TAG_NAME, "input")
#定位鏈接
find_element(By.LINK_TEXT, "新聞")
# 定位長(zhǎng)鏈接
find_element(By.PARTIAL_LINK_TEXT, "新")
# xpath定位
find_element(By.XPATH, "http://*[@class='值']")
# css定位
find_element(By.CSS_SELECTOR, "span.class值>input#值")

10. 定位一組元素
定位一組元素的方法與定位單個(gè)元素的方法類(lèi)似,唯一的區(qū)別是在單詞element后面多加了個(gè)s表示復(fù)數(shù)蝌矛。
用于場(chǎng)景:批量操作元素道批。
例如,勾選頁(yè)面上所有的復(fù)選框入撒,先獲取一組元素隆豹,再?gòu)倪@組對(duì)象中過(guò)濾出需要操作的元素。

# 選擇頁(yè)面上所有的tag_name為input的元素
inputs=driver.find_elements_by_tag_name('input')
# 然后從中過(guò)濾出type為checkbox的元素茅逮,單擊勾選
fro input in inputs:
    if input.get_attribute('type')== 'chexkbox':
        input.click()

操作頁(yè)面的方法

1. 簡(jiǎn)單的元素操作

  • back() 后退
  • forward() 前進(jìn)
  • refresh()刷新(F5)
  • set_window_size(480*800) 設(shè)置瀏覽器窗口大小
  • maximize_window() 全屏顯示
  • clear() 清除文本
  • send_keys("值") 模擬按鍵輸入
  • click() 單擊元素
  • submit() 用于提交表單璃赡,相當(dāng)于“回車(chē)”鍵的操作
  • quit() 關(guān)閉所有窗口
  • close() 關(guān)閉當(dāng)前窗口

2. 獲取頁(yè)面信息

  • size 返回元素的尺寸
  • text 獲取元素的文本內(nèi)容
  • get_attribute(name) 獲取屬性值
  • is_displayed 判斷元素是否可見(jiàn) (True可見(jiàn),F(xiàn)alse不可見(jiàn))
  • title 獲取當(dāng)前頁(yè)面的標(biāo)題
  • current_url 獲得當(dāng)前頁(yè)面的URL

3. 鼠標(biāo)事件

  • perform() 執(zhí)行所有ActionChains中存儲(chǔ)的行為献雅,可以理解成是對(duì)整個(gè)操作的提交動(dòng)作碉考。

  • context_click() 右擊

  • double_click() 雙擊

  • drag_and_drop 拖動(dòng)

  • move_to_element() 鼠標(biāo)懸停

  • release() 在某個(gè)元素位置松開(kāi)鼠標(biāo)左鍵

  • move_by_offset(xoffset, yoffset) 鼠標(biāo)從當(dāng)前位置移動(dòng)到某個(gè)坐標(biāo)

  • move_to_element(to_element) 鼠標(biāo)移動(dòng)到某個(gè)元素

  • move_to_element_with_offset(to_element, xoffset, yoffset) 移動(dòng)到距某個(gè)元素(左上角坐標(biāo))多少距離的位置

實(shí)例模擬右擊

# 導(dǎo)入提供鼠標(biāo)操作的ActionChains類(lèi)    
from selenium webdriver import ActionChains
# 定位要右擊的元素
youji=driver.find_element_by_id("xx")
# 調(diào)用ActionChains()類(lèi),將瀏覽器驅(qū)動(dòng)driver作為參數(shù)傳入
# context_click()方法用于模擬鼠標(biāo)右擊操作
ActionChains(driver).context_click(youji).perform()

4. 鍵盤(pán)事件

  • send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)

  • send_keys(Keys.SPACE) 空格鍵(Space)

  • send_keys(Keys.TAB) 制表鍵(Tab)

  • send_keys(keys.ESCAPE) 回退鍵(Esc)

  • send_keys(Keys.ENTER) 回車(chē)鍵(Enter)

  • send_keys(Keys.CONTROL,'a') 全選(Ctrl+A)

  • send_keys(Keys.CONTROL,'c') 復(fù)制(Ctrl+C)

  • send_keys(Keys.F1) 鍵盤(pán)F1

  • key_down(value, element=None) 按下某個(gè)鍵盤(pán)上的鍵

  • key_up(value, element=None) 松開(kāi)某個(gè)鍵

元素定位調(diào)試

  • 通過(guò)$()調(diào)試定位

  • 通過(guò)$x()調(diào)試xpath定位


    調(diào)試定位
  • print(driver.page_source) 打印元素內(nèi)容挺身,用于調(diào)試用

接下篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侯谁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子章钾,更是在濱河造成了極大的恐慌墙贱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱傀,死亡現(xiàn)場(chǎng)離奇詭異惨撇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)府寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)魁衙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人椰棘,你說(shuō)我怎么就攤上這事纺棺。” “怎么了邪狞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵祷蝌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帆卓,道長(zhǎng)巨朦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任剑令,我火速辦了婚禮糊啡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吁津。我一直安慰自己棚蓄,他們只是感情好堕扶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著梭依,像睡著了一般稍算。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上役拴,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天糊探,我揣著相機(jī)與錄音,去河邊找鬼河闰。 笑死科平,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姜性。 我是一名探鬼主播瞪慧,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼污抬!你這毒婦竟也來(lái)了汞贸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤印机,失蹤者是張志新(化名)和其女友劉穎矢腻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體射赛,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡多柑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楣责。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竣灌。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秆麸,靈堂內(nèi)的尸體忽然破棺而出初嘹,到底是詐尸還是另有隱情,我是刑警寧澤沮趣,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布屯烦,位于F島的核電站,受9級(jí)特大地震影響房铭,放射性物質(zhì)發(fā)生泄漏驻龟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一缸匪、第九天 我趴在偏房一處隱蔽的房頂上張望翁狐。 院中可真熱鬧,春花似錦凌蔬、人聲如沸露懒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隐锭。三九已至窃躲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钦睡,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工躁倒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荞怒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓秧秉,卻偏偏與公主長(zhǎng)得像褐桌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子象迎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355