亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python Selenium庫的基本使用教程

瀏覽:89日期:2022-06-30 14:17:04
(一)Selenium基礎

入門教程:Selenium官網教程

1.Selenium簡介

Selenium是一個用于測試網站的自動化測試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時也支持phantomJS無界面瀏覽器。

2.支持多種操作系統

如Windows、Linux、IOS、Android等。

3.安裝Selenium

pip install Selenium4.安裝瀏覽器驅動

Selenium3.x調用瀏覽器必須有一個webdriver驅動文件

Chrome驅動文件下載:點擊下載chromedrive

Firefox驅動文件下載:點擊下載geckodriver

5.配置環境變量

設置瀏覽器的地址非常簡單。 我們可以手動創建一個存放瀏覽器驅動的目錄,如: F:GeckoDriver , 將下載的瀏覽器驅動文件(例如:chromedriver、geckodriver)丟到該目錄下。

我的電腦?>屬性?>系統設置?>高級?>環境變量?>系統變量?>Path,將“F:GeckoDriver”目錄添加到Path的值中。比如:Path字段;F:GeckoDriver

參考瀏覽器驅動環境配置

(二)Selenium 快速入門

入門參考文獻:Selenium入門

1.Selenium提供了8種定位方式: id name class name tag name link text partial link text xpath css selector 2.定位元素的8種方式

參考:selenium元素定位

定位一個元素 定位多個元素 含義 find_element_by_id find_elements_by_id 通過元素id定位 find_element_by_name find_elements_by_name 通過元素name定位 find_element_by_xpath find_elements_by_xpath 通過xpath表達式定位 find_element_by_link_text find_elements_by_link_tex 通過完整超鏈接定位 find_element_by_partial_link_text find_elements_by_partial_link_text 通過部分鏈接定位 find_element_by_tag_name find_elements_by_tag_name 通過標簽定位 find_element_by_class_name find_elements_by_class_name 通過類名進行定位 find_elements_by_css_selector find_elements_by_css_selector 通過css選擇器進行定位 3.實例演示

假如我們有一個Web頁面,通過前端工具(如,Firebug)查看到一個元素的屬性是這樣的。

<html> <head> <body link='#0000cc'> <a href='http://www.aoyou183.cn/' rel='external nofollow' onmousedown='return c({’fm’:’tab’,’tab’:’logo’})'> <form name='f' action='/s'> <span ></span> <input name='wd' value='' maxlength='255' autocomplete='off'>

通過id定位:

dr.find_element_by_id('kw')

通過name定位:

dr.find_element_by_name('wd')

通過class name定位:

dr.find_element_by_class_name('s_ipt')

通過tag name定位:

dr.find_element_by_tag_name('input')

通過xpath定位,xpath定位有N種寫法,這里列幾個常用寫法:

dr.find_element_by_xpath('//*[@]')dr.find_element_by_xpath('//*[@name=’wd’]')dr.find_element_by_xpath('//input[@]')dr.find_element_by_xpath('/html/body/form/span/input')dr.find_element_by_xpath('//span[@]/input')dr.find_element_by_xpath('//form[@]/span/input')dr.find_element_by_xpath('//input[@ 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 rel='external nofollow' name='tj_trnews'>新聞</a><a rel='external nofollow' name='tj_trhao123'>hao123</a>

通過link text定位:

dr.find_element_by_link_text('新聞')dr.find_element_by_link_text('hao123')

通過partial link text定位:

dr.find_element_by_partial_link_text('新')dr.find_element_by_partial_link_text('hao')dr.find_element_by_partial_link_text('123')4.Selenium庫下webdriver模塊常用方法的使用

1.控制瀏覽器操作的一些方法

方法 說明 set_window_size() 設置瀏覽器的大小 back() 控制瀏覽器后退 forward() 控制瀏覽器前進 refresh() 刷新當前頁面 clear() 清除文本 send_keys (value) 模擬按鍵輸入 click() 單擊元素 submit() 用于提交表單 get_attribute(name) 獲取元素屬性值 is_displayed() 設置該元素是否用戶可見 size 返回元素的尺寸 text 獲取元素的文本

實例演示

from selenium import webdriverfrom time import sleep#1.創建Chrome瀏覽器對象,這會在電腦上在打開一個瀏覽器窗口browser = webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')#2.通過瀏覽器向服務器發送URL請求browser.get('https://www.baidu.com/')sleep(3)#3.刷新瀏覽器browser.refresh()#4.設置瀏覽器的大小browser.set_window_size(1400,800)#5.設置鏈接內容element=browser.find_element_by_link_text('新聞')element.click()element=browser.find_element_by_link_text('“下團組”時間')element.click()

2.鼠標事件

在 WebDriver 中, 將這些關于鼠標操作的方法封裝在 ActionChains 類提供。

方法 說明 ActionChains(driver) 構造ActionChains對象 context_click() 執行鼠標懸停操作 move_to_element(above) 右擊 double_click() 雙擊 drag_and_drop() 拖動 move_to_element(above) 執行鼠標懸停操作 context_click() 用于模擬鼠標右鍵操作, 在調用時需要指定元素定位 perform() 執行所有 ActionChains 中存儲的行為,可以理解成是對整個操作的提交動作

實例演示

Python Selenium庫的基本使用教程

from selenium import webdriver#1.引入 ActionChains 類from selenium.webdriver.common.action_chains import ActionChains#1.創建Chrome瀏覽器對象,這會在電腦上在打開一個瀏覽器窗口driver = webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')driver.get('https://www.baidu.com')#2.定位到要懸停的元素element= driver.find_element_by_link_text('設置')#3.對定位到的元素執行鼠標懸停操作ActionChains(driver).move_to_element(element).perform()#找到鏈接elem1=driver.find_element_by_link_text('搜索設置')elem1.click()#通過元素選擇器找到id=sh_2,并點擊設置elem2=driver.find_element_by_id('sh_1')elem2.click()#保存設置elem3=driver.find_element_by_class_name('prefpanelgo')elem3.click()

3.鍵盤事件

Selenium中的Key模塊為我們提供了模擬鍵盤按鍵的方法,那就是send_keys()方法。它不僅可以模擬鍵盤輸入,也可以模擬鍵盤的操作。

常用的鍵盤操作如下:

模擬鍵盤按鍵 說明 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) 回車鍵(Enter)

組合鍵的使用

模擬鍵盤按鍵 說明 send_keys(Keys.CONTROL,‘a’) 全選(Ctrl+A) send_keys(Keys.CONTROL,‘c’) 復制(Ctrl+C) send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X) send_keys(Keys.CONTROL,‘v’) 粘貼(Ctrl+V) send_keys(Keys.F1…Fn) 鍵盤 F1…Fn

4.獲取斷言信息

不管是在做功能測試還是自動化測試,最后一步需要拿實際結果與預期進行比較。這個比較的稱之為斷言。通過我們獲取title 、URL和text等信息進行斷言。

屬性 說明 title 用于獲得當前頁面的標題 current_url 用戶獲得當前頁面的URL text 獲取搜索條目的文本信息

實例演示

from selenium import webdriverfrom time import sleepdriver = webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')driver.get('https://www.baidu.com')print(’Before search================’)# 打印當前頁面titletitle = driver.titleprint(title)# 打印當前頁面URLnow_url = driver.current_urlprint(now_url)driver.find_element_by_id('kw').send_keys('selenium')driver.find_element_by_id('su').click()sleep(1)print(’After search================’)# 再次打印當前頁面titletitle = driver.titleprint(title)# 打印當前頁面URLnow_url = driver.current_urlprint(now_url)# 獲取結果數目user = driver.find_element_by_class_name(’nums’).textprint(user)#關閉所有窗口driver.quit()

打印輸出結果

Before search================百度一下,你就知道https://www.baidu.com/After search================selenium_百度搜索https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium&rsv_pq=a1d51b980000e36e&rsv_t=a715IZaMpLd1w92I4LNUi7gKuOdlAz5McsHe%2FSLQeBZD44OUIPnjY%2B7pODM&rqlang=cn&rsv_enter=0&rsv_sug3=8&inputT=758&rsv_sug4=759搜索工具百度為您找到相關結果約7,170,000個

5.設置元素等待:參考文獻

6.定位一組元素

定位一組元素的方法與定位單個元素的方法類似,唯一的區別是在單詞element后面多了一個s表示復數。

實例演示

from selenium import webdriverfrom time import sleepdriver =webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')driver.get('https://www.baidu.com')driver.find_element_by_id('kw').send_keys('selenium')driver.find_element_by_id('su').click()sleep(1)#1.定位一組元素elements = driver.find_elements_by_xpath(’//div/h3/a’)print(type(elements))#2.循環遍歷出每一條搜索結果的標題for t in elements: print(t.text) element=driver.find_element_by_link_text(t.text) element.click() sleep(3)driver.quit()

7.多表單切換

在Web應用中經常會遇到frame/iframe表單嵌套頁面的應用,WebDriver只能在一個頁面上對元素識別與定位,對于frame/iframe表單內嵌頁面上的元素無法直接定位。這時就需要通過switch_to.frame()方法將當前定位的主體切換為frame/iframe表單的內嵌頁面中。

方法 說明 switch_to.frame() 將當前定位的主體切換為frame/iframe表單的內嵌頁面中 switch_to.default_content() 跳回最外層的頁面

<html> <body> ... <iframe ...> <html> <body> ... <input name='email' >

126郵箱登錄框的結構大概是這樣子的,想要操作登錄框必須要先切換到iframe表單。

from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://www.126.com')driver.switch_to.frame(’x-URS-iframe’)driver.find_element_by_name('email').clear()driver.find_element_by_name('email').send_keys('username')driver.find_element_by_name('password').clear()driver.find_element_by_name('password').send_keys('password')driver.find_element_by_id('dologin').click()driver.switch_to.default_content()driver.quit()

switch_to.frame() 默認可以直接取表單的id 或name屬性。如果iframe沒有可用的id和name屬性,則可以通過下面的方式進行定位。

……#先通過xpth定位到iframexf = driver.find_element_by_xpath(’//*[@]’)#再將定位對象傳給switch_to.frame()方法driver.switch_to.frame(xf)……driver.switch_to.parent_frame()

8.多窗口切換

在頁面操作過程中有時候點擊某個鏈接會彈出新的窗口,這時就需要主機切換到新打開的窗口上進行操作。WebDriver提供了switch_to.window()方法,可以實現在不同的窗口之間切換。

方法 說明 current_window_handle 獲得當前窗口句柄 window_handles 返回所有窗口的句柄到當前會話 switch_to.window() 用于切換到相應的窗口,與上一節的switch_to.frame()類似,前者用于不同窗口的切換,后者用于不同表單之間的切換。

switch_to.window() 用于切換到相應的窗口,與上一節的switch_to.frame()類似,前者用于不同窗口的切換,后者用于不同表單之間的切換。

實例演示

from selenium import webdriverimport timedriver = webdriver.Chrome('F:ChromeChromeDriverchromedriver')driver.implicitly_wait(10)driver.get('http://www.baidu.com')#1.獲得百度搜索窗口句柄sreach_windows = driver.current_window_handledriver.find_element_by_link_text(’登錄’).click()driver.find_element_by_link_text('立即注冊').click()#1.獲得當前所有打開的窗口的句柄all_handles = driver.window_handles#3.進入注冊窗口for handle in all_handles: if handle != sreach_windows: driver.switch_to.window(handle) print(’跳轉到注冊窗口’) driver.find_element_by_name('account').send_keys(’123456789’) driver.find_element_by_name(’password’).send_keys(’123456789’) time.sleep(2) driver.quit()

9.警告框處理

在WebDriver中處理JavaScript所生成的alert、confirm以及prompt十分簡單,具體做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法進行操作。

方法 說明 text 返回 alert/confirm/prompt 中的文字信息 accept() 接受現有警告框 dismiss() 解散現有警告框 send_keys(keysToSend) 發送文本至警告框。keysToSend:將文本發送至警告框。

實例演示

from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimport timedriver = webdriver.Chrome('F:ChromeChromeDriverchromedriver')driver.implicitly_wait(10)driver.get(’http://www.baidu.com’)# 鼠標懸停至“設置”鏈接link = driver.find_element_by_link_text(’設置’)ActionChains(driver).move_to_element(link).perform()# 打開搜索設置driver.find_element_by_link_text('搜索設置').click()#在此處設置等待2s否則可能報錯time.sleep(2)# 保存設置driver.find_element_by_class_name('prefpanelgo').click()time.sleep(2)# 接受警告框driver.switch_to.alert.accept()driver.quit()

10.下拉框選擇操作

導入選擇下拉框Select類,使用該類處理下拉框操作。

from selenium.webdriver.support.select import Select

Select類的方法

方法 說明 select_by_value(“選擇值”) select標簽的value屬性的值 select_by_index(“索引值”) 下拉框的索引 select_by_visible_testx(“文本值”) 下拉框的文本值

有時我們會碰到下拉框,WebDriver提供了Select類來處理下拉框。 如百度搜索設置的下拉框,如下圖:[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7WUxrkEj-1571973999629)(http://orru5lls3.bkt.clouddn.com/select.png)]

from selenium import webdriverfrom selenium.webdriver.support.select import Selectfrom time import sleepdriver = webdriver.Chrome('F:ChromeChromeDriverchromedriver')driver.implicitly_wait(10)driver.get(’http://www.baidu.com’)#1.鼠標懸停至“設置”鏈接driver.find_element_by_link_text(’設置’).click()sleep(1)#2.打開搜索設置driver.find_element_by_link_text('搜索設置').click()sleep(2)#3.搜索結果顯示條數sel = driver.find_element_by_xpath('//select[@]')Select(sel).select_by_value(’50’) # 顯示50條sleep(3)driver.quit()

11.文件上傳

對于通過input標簽實現的上傳功能,可以將其看作是一個輸入框,即通過send_keys()指定本地文件路徑的方式實現文件上傳。

通過send_keys()方法來實現文件上傳:

from selenium import webdriverimport osdriver = webdriver.Firefox()file_path = ’file:///’ + os.path.abspath(’upfile.html’)driver.get(file_path)# 定位上傳按鈕,添加本地文件driver.find_element_by_name('file').send_keys(’D:upload_file.txt’)driver.quit()

12.cookie操作

有時候我們需要驗證瀏覽器中cookie是否正確,因為基于真實cookie的測試是無法通過白盒和集成測試進行的。WebDriver提供了操作Cookie的相關方法,可以讀取、添加和刪除cookie信息。

WebDriver操作cookie的方法:

方法 說明 get_cookies() 獲得所有cookie信息 get_cookie(name) 返回字典的key為“name”的cookie信息 add_cookie(cookie_dict) 添加cookie?!癱ookie_dict”指字典對象,必須有name 和value 值 delete_cookie(name,optionsString) 刪除cookie信息。“name”是要刪除的cookie的名稱,“optionsString”是該cookie的選項,目前支持的選項包括“路徑”,“域” delete_all_cookies() 刪除所有cookie信息

實例演示

from selenium import webdriverimport timebrowser = webdriver.Chrome('F:ChromeChromeDriverchromedriver')browser.get('http://www.youdao.com')#1.打印cookie信息print(’=====================================’)print('打印cookie信息為:')print(browser.get_cookies)#2.添加cookie信息dict={’name’:'name',’value’:’Kaina’}browser.add_cookie(dict)print(’=====================================’)print(’添加cookie信息為:’)#3.遍歷打印cookie信息for cookie in browser.get_cookies(): print(’%s----%sn’ %(cookie[’name’],cookie[’value’])) #4.刪除一個cookiebrowser.delete_cookie(’name’)print(’=====================================’)print(’刪除一個cookie’)for cookie in browser.get_cookies(): print(’%s----%sn’ %(cookie[’name’],cookie[’value’]))print(’=====================================’)print(’刪除所有cookie后:’)#5.刪除所有cookie,無需傳遞參數browser.delete_all_cookies()for cookie in browser.get_cookies(): print(’%s----%sn’ %(cookie[’name’],cookie[’value’]))time.sleep(3)browser.close()

13.調用JavaScript代碼

雖然WebDriver提供了操作瀏覽器的前進和后退方法,但對于瀏覽器滾動條并沒有提供相應的操作方法。在這種情況下,就可以借助JavaScript來控制瀏覽器的滾動條。WebDriver提供了execute_script()方法來執行JavaScript代碼。

用于調整瀏覽器滾動條位置的JavaScript代碼如下:

<!-- window.scrollTo(左邊距,上邊距); -->window.scrollTo(0,450);

window.scrollTo()方法用于設置瀏覽器窗口滾動條的水平和垂直位置。方法的第一個參數表示水平的左間距,第二個參數表示垂直的上邊距。其代碼如下:

from selenium import webdriverfrom time import sleep#1.訪問百度driver=webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')driver.get('http://www.baidu.com')#2.搜索driver.find_element_by_id('kw').send_keys('selenium')driver.find_element_by_id('su').click()#3.休眠2s目的是獲得服務器的響應內容,如果不使用休眠可能報錯sleep(2)#4.通過javascript設置瀏覽器窗口的滾動條位置js='window.scrollTo(100,450);'driver.execute_script(js)sleep(3)driver.close()

通過瀏覽器打開百度進行搜索,并且提前通過set_window_size()方法將瀏覽器窗口設置為固定寬高顯示,目的是讓窗口出現水平和垂直滾動條。然后通過execute_script()方法執行JavaScripts代碼來移動滾動條的位置。滾動條上下左右滾動代碼演示

from selenium import webdriverfrom time import sleepdriver=webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')driver.set_window_size(400,400)driver.get('https://www.baidu.com')#2.搜索# driver.find_element_by_id('kw').send_keys('selenium')# driver.find_element_by_id('su').click()#3.休眠2s目的是獲得服務器的響應內容,如果不使用休眠可能報錯sleep(10)#4 滾動左右滾動條---向右js2 = 'var q=document.documentElement.scrollLeft=10000'driver.execute_script(js2)sleep(15)#5 滾動左右滾動條---向左js3 = 'var q=document.documentElement.scrollLeft=0'driver.execute_script(js3)sleep(15)#6 拖動到滾動條底部---向下js = 'var q=document.documentElement.scrollTop=10000'driver.execute_script(js)sleep(15)#7 拖動到滾動條底部---向上js = 'var q=document.documentElement.scrollTop=0'driver.execute_script(js)sleep(15)driver.close()

14.窗口截圖

自動化用例是由程序去執行的,因此有時候打印的錯誤信息并不十分明確。如果在腳本執行出錯的時候能對當前窗口截圖保存,那么通過圖片就可以非常直觀地看出出錯的原因。WebDriver提供了截圖函數get_screenshot_as_file()來截取當前窗口。

截屏方法:

方法 說明 get_screenshot_as_file(self, filename) 用于截取當前窗口,并把圖片保存到本地

from selenium import webdriverfrom time import sleepdriver =webdriver.Firefox(executable_path ='F:GeckoDrivergeckodriver')driver.get(’http://www.baidu.com’)driver.find_element_by_id(’kw’).send_keys(’selenium’)driver.find_element_by_id(’su’).click()sleep(2)#1.截取當前窗口,并指定截圖圖片的保存位置driver.get_screenshot_as_file('D:baidu_img.jpg')driver.quit()

15.關閉瀏覽器

在前面的例子中我們一直使用quit()方法,其含義為退出相關的驅動程序和關閉所有窗口。除此之外,WebDriver還提供了close()方法,用來關閉當前窗口。例多窗口的處理,在用例執行的過程中打開了多個窗口,我們想要關閉其中的某個窗口,這時就要用到close()方法進行關閉了。

方法 說明 close() 關閉單個窗口 quit() 關閉所有窗口

總結

到此這篇關于Python Selenium庫的基本使用教程的文章就介紹到這了,更多相關Python Selenium庫使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产黄毛片 | 三级黄色片a| 国产成人福利在线视老湿机 | 欧美精品区 | 国产一区二区视频在线观看 | 国产精品一区二区国产 | 欧美bbww| 精品一区二区三区四区乱码90 | 国产精品视频白浆免费视频 | 国产爱v | 看黄a大片 免费 | 91视频h| 伊人热人久久中文字幕 | 久久精品播放 | 国产偷国产偷亚洲高清在线 | 亚洲v欧美v日韩v国产v | 国产一级一级一级国产片 | 9191精品国产免费不久久 | 日本一级特黄完整大片 | 亚洲综合九九 | 亚洲高清国产一线久久 | 亚洲成年网站在线观看 | 久久香蕉国产观看猫咪3atv | 亚洲综合网在线观看首页 | 中国一级大黄大片 | 91精品国| 欧美日韩在线成人看片a | 免费国产zzzwww色 | 大学生一级一片第一次欧美 | 精品久久综合一区二区 | 亚洲高清视频在线观看 | 久久毛片免费看一区二区三区 | 不卡视频在线播放 | 日本一级特黄啪啪片 | 国产香蕉在线视频 | 欧美精品99毛片免费高清观看 | 欧美金妇欧美乱妇视频 | 香蕉视频91 | 国产精品夜色视频一区二区 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 性亚洲 |