溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python+Selenium+phantomjs怎么實(shí)現(xiàn)網(wǎng)頁(yè)模擬登錄和截圖

發(fā)布時(shí)間:2021-11-19 15:27:12 來(lái)源:億速云 閱讀:233 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“Python+Selenium+phantomjs怎么實(shí)現(xiàn)網(wǎng)頁(yè)模擬登錄和截圖”,在日常操作中,相信很多人在Python+Selenium+phantomjs怎么實(shí)現(xiàn)網(wǎng)頁(yè)模擬登錄和截圖問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Python+Selenium+phantomjs怎么實(shí)現(xiàn)網(wǎng)頁(yè)模擬登錄和截圖”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

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

  安裝 Python

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

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

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

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

  安裝 selenium

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

  通過(guò)python包管理工具pip安裝

  pip install selenium

  安裝 phantomjs

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

  phantomjs安裝鏈接 www.phantomjs.org

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

  demo.py:

  # coding=utf-8

  # 導(dǎo)入網(wǎng)頁(yè)驅(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)建瀏覽器對(duì)象

  # 括號(hào)內(nèi)為phantomjs安裝位置

  driver = webdriver.PhantomJS(executable_path="D:\\Python27\\Scripts\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe")

  # 訪問(wèn)的網(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()

  # 等待登錄頁(yè)面加載完成,WebDriverWait (后面有等待方法介紹)

  WebDriverWait(driver, 10, 0.5).until(lambda diver:driver.find_element_by_xpath('//a[@class="dl"]'),message="")

  time.sleep(2)

  # 截取登錄框的頁(yè)面保存到相應(yīng)位置

  driver.save_screenshot('demo\\img\\login1.png')

  # 定位登錄頁(yè)面用戶名和密碼元素并模擬填入用戶名和密碼

  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è)面保存到相應(yīng)位置

  driver.save_screenshot('demo\\img\\login2.png')

  # 模擬點(diǎn)擊按鈕跳轉(zhuǎn)體育頁(yè)面

  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è)面保存到相應(yīng)位置

  driver.save_screenshot('demo\\img\\sport.png')

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

  driver.quit()

  運(yùn)行python腳本

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

  python demo.py

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

  登錄框的頁(yè)面截圖:

  登錄后的頁(yè)面截圖:

  體育頁(yè)面截圖:

  部分方法介紹:

  區(qū)塊定位截圖(二次截圖)方法:

  PIL(Python Image Library)是python的第三方圖像處理庫(kù),PIL功能非常強(qiáng)大,API非常簡(jiǎn)單易用,已經(jīng)是Python平臺(tái)事實(shí)上的圖像處理標(biāo)準(zhǔn)庫(kù)了。 PIL只支持python2.x的版本,python3.x的版本需要安裝pillow, pillow是一個(gè)對(duì)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)頁(yè)中的x坐標(biāo)

  left = img.location['x']

  # 區(qū)塊元素左上角在網(wǎng)頁(yè)中的y坐標(biāo)

  top = img.location['y']

  # 區(qū)塊元素右下角在網(wǎng)頁(yè)中的x坐標(biāo)

  right = img.location['x'] + img.size['width']

  # 區(qū)塊元素右下角在網(wǎng)頁(yè)中的y坐標(biāo)

  bottom = img.location['y'] + img.size['height']

  # 打開(kāi)頁(yè)面的截圖

  photo = Image.open('demo\\img\\img_page.png')

  # 根據(jù)區(qū)塊元素坐標(biāo)實(shí)現(xiàn)二次截圖

  photo = photo.crop((left, top, right, bottom))

  # 保存二次截圖鄭州人流醫(yī)院哪家好 http://m.zzzy120.com/

  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路徑語(yǔ)言,通過(guò)確定xml文檔中的元素位置來(lái)完成對(duì)元素的定位

  例如: find_element_by_xpath("//div[@id=‘one’]") 定位id為one的div元素

  find_element_by_xpath("//*[@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)化測(cè)試時(shí),有時(shí)下一步的操作會(huì)依賴上一步的結(jié)果或者內(nèi)容,上一步操作成功完成之后才能進(jìn)行下一步操作,此時(shí),我們就需要使用等待,來(lái)判斷上一步操作是否完成,進(jìn)而執(zhí)行下面的操作,例如登錄頁(yè)面進(jìn)行登錄操作時(shí),需要等待登錄頁(yè)面加載成功,才能定位到用戶名和密碼對(duì)應(yīng)的元素,然后才能填充用戶名和密碼,進(jìn)行登錄操作。

  1. 強(qiáng)制等待

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

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

  2. 隱式等待

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

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

  3. 顯式等待(推薦使用)

  WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

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

  driver:瀏覽器驅(qū)動(dòng)

  timeout:最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位

  poll_frequency:檢測(cè)的間隔步長(zhǎng),默認(rèn)為0.5s

  ignored_exceptions:超時(shí)后的拋出的異常信息,默認(rèn)拋出NoSuchElementExeception異常

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

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

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

到此,關(guān)于“Python+Selenium+phantomjs怎么實(shí)現(xiàn)網(wǎng)頁(yè)模擬登錄和截圖”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI