欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能(windows環(huán)境)

 更新時(shí)間:2019年12月11日 09:42:18   作者:廊坊吳彥祖  
Python是一種跨平臺的計(jì)算機(jī)程序設(shè)計(jì)語言,它可以運(yùn)行在Windows、Mac和各種Linux/Unix系統(tǒng)上。這篇文章主要介紹了Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能,需要的朋友可以參考下

本文全部操作均在windows環(huán)境下

安裝 Python

Python是一種跨平臺的計(jì)算機(jī)程序設(shè)計(jì)語言,它可以運(yùn)行在Windows、Mac和各種Linux/Unix系統(tǒng)上。是一種面向?qū)ο蟮膭?dòng)態(tài)類型語言,最初被設(shè)計(jì)用于編寫自動(dòng)化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨(dú)立的、大型項(xiàng)目的開發(fā)

去Python的官網(wǎng)  www.python.org  下載安裝

安裝時(shí)勾選pip (python包管理工具),同時(shí)安裝pip

python安裝好之后,打開命令行工具cmd,輸入“python -V”,然后敲回車,如果出現(xiàn)python版本號,則表示安裝成功

安裝 selenium

selenium 是一個(gè)用于Web應(yīng)用程序測試的工具。selenium測試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web應(yīng)用程序測試系統(tǒng),包含了測試的錄制(selenium IDE),編寫及運(yùn)行(Selenium Remote Control)和測試的并行處理(Selenium Grid)

通過python包管理工具pip安裝

pip install selenium

安裝 phantomjs

phantomJS是一個(gè)基于webkit的javaScript API。它使用QtWebKit作為它核心瀏覽器的功能,使用webkit來編譯解釋執(zhí)行javaScript代碼。任何你可以基于在webkit瀏覽器做的事情,它都能做到。它不僅是個(gè)隱性的瀏覽器,提供了諸如css選擇器、支持wen標(biāo)準(zhǔn)、DOM操作、json、HTML5等,同時(shí)也提供了處理文件I/O的操作,從而使你可以向操作系統(tǒng)讀寫文件等。phantomJS的用處可謂非常廣泛諸如網(wǎng)絡(luò)監(jiān)測、網(wǎng)頁截屏、無需瀏覽器的wen測試、頁面訪問自動(dòng)化等

phantomjs安裝鏈接 www.phantomjs.org

在桌面創(chuàng)建demo文件夾,創(chuàng)建demo.py文件,當(dāng)做我們的腳本文件,創(chuàng)建img文件夾用來存放截取的圖片demo.py:

# coding=utf-8
# 導(dǎo)入網(wǎng)頁驅(qū)動(dòng)軟件
from selenium import webdriver
# 導(dǎo)入WebDriverWait等待模塊
from selenium.webdriver.support.wait import WebDriverWait
import time

# 調(diào)用環(huán)境變量指定的PhantomJS瀏覽器創(chuàng)建瀏覽器對象
# 括號內(nèi)為phantomjs安裝位置
driver = webdriver.PhantomJS(executable_path="D:\\Python27\\Scripts\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe")
# 訪問的網(wǎng)址(以央視網(wǎng)為例)
driver.get("http://www.cctv.com/")
# 最大化瀏覽器
driver.maximize_window()

# 模擬點(diǎn)擊登錄按鈕登錄彈出登錄框(后面有定位元素方法介紹)
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)
# 截取登錄框的頁面保存到相應(yīng)位置
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')
# 模擬點(diǎn)擊登錄按鈕登錄
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)
# 截取登錄后的頁面保存到相應(yīng)位置
driver.save_screenshot('demo\\img\\login2.png')

# 模擬點(diǎn)擊按鈕跳轉(zhuǎn)體育頁面
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)

# 截取體育頁面保存到相應(yīng)位置
driver.save_screenshot('demo\\img\\sport.png')

# 退出驅(qū)動(dòng)關(guān)閉所有窗口
driver.quit()

運(yùn)行python腳本

打開命令行窗口cmd,切換到demo.py文件的路徑下,輸入

python demo.py

腳本運(yùn)行后會自動(dòng)填寫我們設(shè)定好的用戶名密碼并登錄,截取設(shè)置好的頁面并保存到img文件夾

登錄框的頁面截圖:

在這里插入圖片描述

登錄后的頁面截圖:

在這里插入圖片描述

體育頁面截圖:

在這里插入圖片描述

部分方法介紹:區(qū)塊定位截圖(二次截圖)方法:

PIL(Python Image Library)是python的第三方圖像處理庫,PIL功能非常強(qiáng)大,API非常簡單易用,已經(jīng)是Python平臺事實(shí)上的圖像處理標(biāo)準(zhǔn)庫了。 PIL只支持python2.x的版本,python3.x的版本需要安裝pillow, pillow是一個(gè)對PIL友好的分支,但是支持python3.x的版本

python2.x版本下安裝PIL進(jìn)行二次截圖

pip install PIL

python3.x版本下安裝pillow 進(jìn)行區(qū)塊定位截圖

pip install pillow

demo.py:

# 導(dǎo)入Image類
from PIL import Image

# 定位需要二次截圖區(qū)塊的元素
img = driver.find_element_by_xpath('//*[@class="weui-img"]')
# 區(qū)塊元素左上角在網(wǎng)頁中的x坐標(biāo)
left = img.location['x']
# 區(qū)塊元素左上角在網(wǎng)頁中的y坐標(biāo)
top = img.location['y']
# 區(qū)塊元素右下角在網(wǎng)頁中的x坐標(biāo)
right = img.location['x'] + img.size['width']
# 區(qū)塊元素右下角在網(wǎng)頁中的y坐標(biāo)
bottom = img.location['y'] + img.size['height']
# 打開頁面的截圖
photo = Image.open('demo\\img\\img_page.png')
# 根據(jù)區(qū)塊元素坐標(biāo)實(shí)現(xiàn)二次截圖
photo = photo.crop((left, top, right, bottom))
# 保存二次截圖
photo.save('demo\\img\\img.png')

WebDriver8種基本元素定位方法:

1. find_element_by_id() 根據(jù)id屬性進(jìn)行定位

例如:find_element_by_id(“one”) 定位id為one的元素

2. find_element_by_name() 根據(jù)name屬性進(jìn)行定位

例如:find_element_by_name(“one”) 定位name屬性為one的元素

3. find_element_by_class_name() 根據(jù)class的名字進(jìn)行定位

例如:find_element_by_class_name(“one”) 定位class為one的元素

4. find_element_by_xpath() xpath是XML路徑語言,通過確定xml文檔中的元素位置來完成對元素的定位

例如:find_element_by_xpath("http://div[@id=‘one']") 定位id為one的div元素
find_element_by_xpath("http://*[@class=‘two']") 定位class為two的元素

5. find_element_by_css_selector() 根據(jù)css屬性進(jìn)行定位

例如:find_element_by_css_selector("#one") 定位id為one的div元素
find_element_by_css_selector(".two") 定位class為two的元素

6. find_element_by_tag_name () 根據(jù)標(biāo)簽名進(jìn)行定位

例如:find_element_by_tag_name(“input”) 定位input元素

7. find_element_by_link_text() 根據(jù)完整a鏈接文字進(jìn)行定位find_element_by_partial_link_text() 根據(jù)部分a鏈接文字進(jìn)行定位

例如:find_element_by_link_text(“新聞”) 定位文字為‘新聞'的a元素
find_element_by_partial_link_text(“聞”) 定位文字包括‘聞'的a元素

8. By定位( 需要導(dǎo)入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元素

當(dāng)定位元素為多個(gè)時(shí),使用elements復(fù)數(shù)定位,即把定位方法中的element換成elements,此時(shí)獲取到的為相同屬性的一組元素,返回一個(gè)list隊(duì)列,然后可以再去定位單個(gè)元素

例如:find_elements_by_class_name(“one”)[1] 定位class為one的所有元素中第二個(gè)元素

selenium的3種等待方法:

在做自動(dòng)化測試時(shí),有時(shí)下一步的操作會依賴上一步的結(jié)果或者內(nèi)容,上一步操作成功完成之后才能進(jìn)行下一步操作,此時(shí),我們就需要使用等待,來判斷上一步操作是否完成,進(jìn)而執(zhí)行下面的操作,例如登錄頁面進(jìn)行登錄操作時(shí),需要等待登錄頁面加載成功,才能定位到用戶名和密碼對應(yīng)的元素,然后才能填充用戶名和密碼,進(jìn)行登錄操作。

1. 強(qiáng)制等待time.sleep(s) 強(qiáng)制等待s秒后再進(jìn)行下面的操作

缺點(diǎn):不易把控時(shí)間,等待時(shí)間固定,如果沒到設(shè)置時(shí)間,已經(jīng)可以進(jìn)行下面的操作,則需要多余的等待,如果到達(dá)設(shè)置時(shí)間,還沒完成上一步操作,下面的操作還無法正常進(jìn)行,則會直接報(bào)錯(cuò)

2. 隱式等待implicitly_wait(s) 在s秒內(nèi),上一步操作完成,進(jìn)行下一步操作,否則等待s秒后,然后進(jìn)行下一步操作

缺點(diǎn):如果到達(dá)設(shè)置時(shí)間,還沒完成上一步操作,下面的操作還無法正常進(jìn)行,則會直接報(bào)錯(cuò)

3. 顯式等待(推薦使用)WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

等待頁面加載完成,找到某個(gè)條件發(fā)生后再繼續(xù)執(zhí)行后續(xù)代碼,如果超過設(shè)置時(shí)間檢測不到則拋出異常

driver:瀏覽器驅(qū)動(dòng)
timeout:最長超時(shí)時(shí)間,默認(rèn)以秒為單位
poll_frequency:檢測的間隔步長,默認(rèn)為0.5s
ignored_exceptions:超時(shí)后的拋出的異常信息,默認(rèn)拋出NoSuchElementExeception異常

與until()結(jié)合使用:

WebDriverWait(driver, s).until(method,message="")

在s秒內(nèi),每0.5秒檢測一次,如果傳入的方法返回為true,進(jìn)行下一步操作,如果到達(dá)設(shè)置時(shí)間未檢測到,下面的操作無法正常運(yùn)行,則會直接報(bào)錯(cuò)

總結(jié)

以上所述是小編給大家介紹的Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能(windows環(huán)境),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • python使用MySQLdb訪問mysql數(shù)據(jù)庫的方法

    python使用MySQLdb訪問mysql數(shù)據(jù)庫的方法

    這篇文章主要介紹了python使用MySQLdb訪問mysql數(shù)據(jù)庫的方法,實(shí)例分析了Python使用MySQLdb模塊操作mysql數(shù)據(jù)庫的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • Python 等分切分?jǐn)?shù)據(jù)及規(guī)則命名的實(shí)例代碼

    Python 等分切分?jǐn)?shù)據(jù)及規(guī)則命名的實(shí)例代碼

    這篇文章主要介紹了Python 等分切分?jǐn)?shù)據(jù)及規(guī)則命名的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python爬蟲獲取op.gg英雄聯(lián)盟英雄對位勝率的源碼

    Python爬蟲獲取op.gg英雄聯(lián)盟英雄對位勝率的源碼

    這篇文章主要介紹了Python爬蟲獲取op.gg英雄聯(lián)盟英雄對位勝率,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • python openpyxl篩選某些列的操作

    python openpyxl篩選某些列的操作

    這篇文章主要介紹了python openpyxl篩選某些列的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • M1芯片Mac上Anaconda的暫時(shí)替代(miniforge)

    M1芯片Mac上Anaconda的暫時(shí)替代(miniforge)

    這篇文章主要介紹了M1芯片Mac上Anaconda的暫時(shí)替代(miniforge),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法詳解

    Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下
    2022-09-09
  • 讓Django的BooleanField支持字符串形式的輸入方式

    讓Django的BooleanField支持字符串形式的輸入方式

    這篇文章主要介紹了讓Django的BooleanField支持字符串形式的輸入方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python雙向隊(duì)列deque的使用

    python雙向隊(duì)列deque的使用

    本文主要介紹了python雙向隊(duì)列deque的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python裝飾器代碼深入講解

    python裝飾器代碼深入講解

    這篇文章主要介紹了python裝飾器代碼深入講解,文章使用代碼講解了pythone裝飾器的用法,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • python安裝pytorch方式

    python安裝pytorch方式

    這篇文章主要介紹了python安裝pytorch方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論