Python+Selenium+phantomjs實現網頁模擬登入和截圖
本文全部操作均在windows環境下
安裝 Python
Python是一種跨平臺的計算機程式設計語言,它可以執行在Windows、Mac和各種Linux/Unix系統上。是一種物件導向的動態型別語言,最初被設計用於編寫自動化指令碼(shell),隨著版本的不斷更新和語言新功能的新增,越來越多被用於獨立的、大型專案的開發
去Python的官網 下載安裝
安裝時勾選pip (python包管理工具),同時安裝pip
python安裝好之後,開啟命令列工具cmd,輸入“python -V”,然後敲回車,如果出現python版本號,則表示安裝成功
安裝 selenium
selenium 是一個用於Web應用程式測試的工具。selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web應用程式測試系統,包含了測試的錄製(selenium IDE),編寫及執行(Selenium Remote Control)和測試的並行處理(Selenium Grid)
透過python包管理工具pip安裝
pip install selenium
安裝 phantomjs
phantomJS是一個基於webkit的javaScript API。它使用QtWebKit作為它核心瀏覽器的功能,使用webkit來編譯解釋執行javaScript程式碼。任何你可以基於在webkit瀏覽器做的事情,它都能做到。它不僅是個隱性的瀏覽器,提供了諸如css選擇器、支援wen標準、DOM操作、json、HTML5等,同時也提供了處理檔案I/O的操作,從而使你可以向作業系統讀寫檔案等。phantomJS的用處可謂非常廣泛諸如網路監測、網頁截圖、無需瀏覽器的wen測試、頁面訪問自動化等
phantomjs安裝連結
在桌面建立demo資料夾,建立demo.py檔案,當做我們的指令碼檔案,建立img資料夾用來存放擷取的圖片
demo.py:
# coding=utf-8
# 匯入網頁驅動軟體
from selenium import webdriver
# 匯入WebDriverWait等待模組
from selenium.webdriver.support.wait import WebDriverWait
import time
# 呼叫環境變數指定的PhantomJS瀏覽器建立瀏覽器物件
# 括號內為phantomjs安裝位置
driver = webdriver.PhantomJS(executable_path="D:\\Python27\\Scripts\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe")
# 訪問的網址(以央視網為例)
driver.get(")
# 最大化瀏覽器
driver.maximize_window()
# 模擬點選登入按鈕登入彈出登入框(後面有定位元素方法介紹)
driver.find_elements_by_xpath('//span[@class="btn_icon"]')[1].click()
# 等待登入頁面載入完成,WebDriverWait (後面有等待方法介紹)
WebDriverWait(driver, 10, 0.5).until(lambda diver:driver.find_element_by_xpath('//a[@class="dl"]'),message="")
time.sleep(2)
# 擷取登入框的頁面儲存到相應位置
driver.save_screenshot('demo\\img\\login1.png')
# 定位登入頁面使用者名稱和密碼元素並模擬填入使用者名稱和密碼
driver.find_element_by_name("username").send_keys('xxxxxxxxxxx')
driver.find_element_by_name("passwd_view").send_keys('xxxxxxxxxxx')
# 模擬點選登入按鈕登入
driver.find_element_by_link_text('登入').click()
WebDriverWait(driver, 10, 0.5).until(lambda diver:driver.find_elements_by_xpath('//span[@class="btn_icon"]'),message="")
time.sleep(2)
# 擷取登入後的頁面儲存到相應位置
driver.save_screenshot('demo\\img\\login2.png')
# 模擬點選按鈕跳轉體育頁面
driver.find_element_by_link_text('體育').click()
WebDriverWait(driver, 10, 0.5).until(lambda diver:driver.find_element_by_link_text('CBA'),message="")
time.sleep(2)
# 擷取體育頁面儲存到相應位置
driver.save_screenshot('demo\\img\\sport.png')
# 退出驅動關閉所有視窗
driver.quit()
執行python指令碼
開啟命令列視窗cmd,切換到demo.py檔案的路徑下,輸入
python demo.py
指令碼執行後會自動填寫我們設定好的使用者名稱密碼並登入,擷取設定好的頁面並儲存到img資料夾
登入框的頁面截圖:
登入後的頁面截圖:
體育頁面截圖:
部分方法介紹:
區塊定位截圖(二次截圖)方法:
PIL(Python Image Library)是python的第三方影像處理庫,PIL功能非常強大,API非常簡單易用,已經是Python平臺事實上的影像處理標準庫了。 PIL只支援python2.x的版本,python3.x的版本需要安裝pillow, pillow是一個對PIL友好的分支,但是支援python3.x的版本
python2.x版本下安裝PIL進行二次截圖
pip install PIL
python3.x版本下安裝pillow 進行區塊定位截圖
pip install pillow
demo.py:
# 匯入Image類
from PIL import Image
# 定位需要二次截圖區塊的元素
img = driver.find_element_by_xpath('//*[@class="weui-img"]')
# 區塊元素左上角在網頁中的x座標
left = img.location['x']
# 區塊元素左上角在網頁中的y座標
top = img.location['y']
# 區塊元素右下角在網頁中的x座標
right = img.location['x'] + img.size['width']
# 區塊元素右下角在網頁中的y座標
bottom = img.location['y'] + img.size['height']
# 開啟頁面的截圖
photo = Image.open('demo\\img\\img_page.png')
# 根據區塊元素座標實現二次截圖
photo = photo.crop((left, top, right, bottom))
# 儲存二次截圖 鄭州人流醫院哪家好
photo.save('demo\\img\\img.png')
WebDriver8種基本元素定位方法:
1. find_element_by_id() 根據id屬性進行定位
例如: find_element_by_id(“one”) 定位id為one的元素
2. find_element_by_name() 根據name屬性進行定位
例如: find_element_by_name(“one”) 定位name屬性為one的元素
3. find_element_by_class_name() 根據class的名字進行定位
例如: find_element_by_class_name(“one”) 定位class為one的元素
4. find_element_by_xpath() xpath是XML路徑語言,透過確定xml文件中的元素位置來完成對元素的定位
例如: find_element_by_xpath("//div[@id=‘one’]") 定位id為one的div元素
find_element_by_xpath("//*[@class=‘two’]") 定位class為two的元素
5. find_element_by_css_selector() 根據css屬性進行定位
例如: find_element_by_css_selector("#one") 定位id為one的div元素
find_element_by_css_selector(".two") 定位class為two的元素
6. find_element_by_tag_name () 根據標籤名進行定位
例如: find_element_by_tag_name(“input”) 定位input元素
7. find_element_by_link_text() 根據完整a連結文字進行定位
find_element_by_partial_link_text() 根據部分a連結文字進行定位
例如: find_element_by_link_text(“新聞”) 定位文字為‘新聞’的a元素
find_element_by_partial_link_text(“聞”) 定位文字包括‘聞’的a元素
8. By定位
( 需要匯入By類:from selenium.webdriver.common.by import By )
例如: find_element(By.ID,“one”) 定位id為one的元素
find_element(By.NAME,“one”) 定位name屬性為one的元素
find_element(By.CLASS_NAME,“one”) 定位class為one的元素
find_element(By.TAG_NAME,“div”) 定位div元素
當定位元素為多個時,使用elements複數定位,即把定位方法中的element換成elements,此時獲取到的為相同屬性的一組元素,返回一個list佇列,然後可以再去定位單個元素
例如: find_elements_by_class_name(“one”)[1] 定位class為one的所有元素中第二個元素
selenium的3種等待方法:
在做自動化測試時,有時下一步的操作會依賴上一步的結果或者內容,上一步操作成功完成之後才能進行下一步操作,此時,我們就需要使用等待,來判斷上一步操作是否完成,進而執行下面的操作,例如登入頁面進行登入操作時,需要等待登入頁面載入成功,才能定位到使用者名稱和密碼對應的元素,然後才能填充使用者名稱和密碼,進行登入操作。
1. 強制等待
time.sleep(s) 強制等待s秒後再進行下面的操作
缺點:不易把控時間,等待時間固定,如果沒到設定時間,已經可以進行下面的操作,則需要多餘的等待,如果到達設定時間,還沒完成上一步操作,下面的操作還無法正常進行,則會直接報錯
2. 隱式等待
implicitly_wait(s) 在s秒內,上一步操作完成,進行下一步操作,否則等待s秒後,然後進行下一步操作
缺點:如果到達設定時間,還沒完成上一步操作,下面的操作還無法正常進行,則會直接報錯
3. 顯式等待(推薦使用)
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
等待頁面載入完成,找到某個條件發生後再繼續執行後續程式碼,如果超過設定時間檢測不到則丟擲異常
driver:瀏覽器驅動
timeout:最長超時時間,預設以秒為單位
poll_frequency:檢測的間隔步長,預設為0.5s
ignored_exceptions:超時後的丟擲的異常資訊,預設丟擲NoSuchElementExeception異常
與until()結合使用:
WebDriverWait(driver, s).until(method,message="")
在s秒內,每0.5秒檢測一次,如果傳入的方法返回為true,進行下一步操作,如果到達設定時間未檢測到,下面的操作無法正常執行,則會直接報錯
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2668048/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Java】——模擬登入實現Java
- Python網頁截圖/螢幕截圖/截長圖如何實現?Python網頁
- PHP如何實現網頁截圖?PHP網頁
- QQ模擬登入實現後篇
- javascript實現網頁截圖匯出方案JavaScript網頁
- 實戰模擬│單點登入 SSO 的實現
- golang快速實現服務端網頁截圖Golang服務端網頁
- 實戰:Mailivery 模擬登入AI
- SpringBoot 整合 Shiro 實現登入攔截Spring Boot
- ajax 實現微信網頁授權登入網頁
- 實戰模擬│JWT 登入認證JWT
- 鴻蒙Navigation攔截器實現頁面跳轉登入鑑權方案鴻蒙Navigation
- 如何在Mac網頁中長截圖?蘋果電腦網頁截圖怎麼截長圖?Mac網頁蘋果
- Spartacus 註冊和登入頁面的實現細節
- html2canvas-實現頁面截圖HTMLCanvas
- Python-模擬登入Python
- selenium模擬登入12306
- 微信掃小程式碼實現網頁端登入網頁
- app直播原始碼,平臺登入頁面實現和修改密碼頁面實現APP原始碼密碼
- xcode模擬器截圖。mac系統。XCodeMac
- 使用chromedriver抓取網頁截圖Chrome網頁
- 網頁截圖工具:WebShot for Mac網頁WebMac
- GD-WLAN登入頁面抓包及curl模擬方法
- 利用Python模擬GitHub登入PythonGithub
- Python培訓分享:python如何用cookie實現自動模擬登入?PythonCookie
- 前後端實現登入token攔截校驗後端
- Golang-Docker ChromeDP瀏覽器模擬和截圖微服務GolangDockerChrome瀏覽器微服務
- 為爬蟲獲取登入cookies: 使用Charles和requests模擬微博登入爬蟲Cookie
- Python爬蟲實戰之(五)| 模擬登入wechatPython爬蟲
- 【網頁登入】QQ 登入、微信登入、微博登入、GitHub 登入網頁Github
- 免費的網頁截圖API網頁API
- 通過抓包實現Python模擬登陸各網站原理分析Python網站
- 怎麼生成完整的網頁截圖? Full Page Screen Capture 幫你實現網頁APT
- 模擬登入之web監控Web
- 前端架構之vue+axios 前端實現登入攔截(路由攔截、http攔截)前端架構VueiOS路由HTTP
- js實現視訊截圖,視訊批量截圖,canvas實現JSCanvas
- 《巴士模擬21》現已登陸PC、PlayStation®和Xbox!
- HTML基礎實現簡單的註冊和登入頁面HTML