Selenium基于PIL實(shí)現(xiàn)拼接滾動(dòng)截圖
Selenium默認(rèn)的截圖save_screenshot只支持對(duì)當(dāng)前窗口內(nèi)容進(jìn)行截圖,當(dāng)如果你想要截取整個(gè)網(wǎng)頁(yè),那么,可以明確的告訴你。
Selenium做不到。
你可以手工使用開發(fā)者工具Ctrl+Shift+P調(diào)出命令行菜單,執(zhí)行Capture full screenshot命令進(jìn)行截圖,如下圖圖:
也可以通過(guò)
Selenium Webdriver的 execute_cdp_cmd()來(lái)調(diào)用一下Chrome DevTools Protocal提供的方法。但是,很遺憾,沒(méi)有全屏截圖的方法。
Selenium2時(shí),還可以使用Firefox全屏截圖。Selenium3之后,所有瀏覽器不再支持。
一種方式是使用aShot,一個(gè)jar包,這顯然是Java派的解決方案。
另外如果對(duì)樣式?jīng)]有強(qiáng)迫癥的話,可以通過(guò)滾動(dòng)頁(yè)面截取多張+PIL圖片拼接的方式實(shí)現(xiàn)全屏的截圖。
示例代碼:
from time import sleep from PIL import Image import numpy as np from selenium import webdriver driver = webdriver.Chrome() driver.fullscreen_window() # 全屏窗口 driver.get('https://www.qq.com/') window_height = driver.get_window_size()['height'] # 窗口高度 page_height = driver.execute_script('return document.documentElement.scrollHeight') # 頁(yè)面高度 driver.save_screenshot('qq.png') if page_height > window_height: n = page_height // window_height # 需要滾動(dòng)的次數(shù) base_mat = np.atleast_2d(Image.open('qq.png')) # 打開截圖并轉(zhuǎn)為二維矩陣 for i in range(n): driver.execute_script(f'document.documentElement.scrollTop={window_height*(i+1)};') sleep(.5) driver.save_screenshot(f'qq_{i}.png') # 保存截圖 mat = np.atleast_2d(Image.open(f'qq_{i}.png')) # 打開截圖并轉(zhuǎn)為二維矩陣 base_mat = np.append(base_mat, mat, axis=0) # 拼接圖片的二維矩陣 Image.fromarray(base_mat).save('hao123.png') driver.quit()
需要安裝PIL和numpy: pip install PIL numpy
上例中,全屏窗口以獲得最大展示范圍,通過(guò)get_window_size()獲取屏幕高度,通過(guò)執(zhí)行js,獲取頁(yè)面高度。
相除后獲得滾動(dòng)次數(shù)。
每次滾動(dòng)后,截圖保存,然后使用Image打開轉(zhuǎn)換為二維矩陣拼接到上一個(gè)圖片的二維矩陣中。
循環(huán)完,最后再將拼接的二維矩陣輸出成圖片。
效果展示,如下圖:
注意:如果是流式加載的頁(yè)面,頁(yè)面高度是不斷變長(zhǎng)的,非固定為第一次獲取到的page_height的值,需要另外處理
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁(yè)模擬登錄和截圖功能(windows環(huán)境)
- Java selenium截圖操作的實(shí)現(xiàn)
- selenium+python截圖不成功的解決方法
- Python實(shí)現(xiàn)的網(wǎng)頁(yè)截圖功能【PyQt4與selenium組件】
- 關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼
- Selenium Webdriver實(shí)現(xiàn)截圖功能的示例
- Python+selenium實(shí)現(xiàn)截圖圖片并保存截取的圖片
- Python中使用 Selenium 實(shí)現(xiàn)網(wǎng)頁(yè)截圖實(shí)例
相關(guān)文章
python實(shí)現(xiàn)簡(jiǎn)易自習(xí)室座位預(yù)約系統(tǒng)
本文將結(jié)合實(shí)例代碼,介紹python實(shí)現(xiàn)簡(jiǎn)易自習(xí)室座位預(yù)約系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06python selenium對(duì)應(yīng)的瀏覽器chromedriver版本不一致問(wèn)題
這篇文章主要介紹了python selenium對(duì)應(yīng)的瀏覽器chromedriver版本不一致問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08使用Python實(shí)現(xiàn)大學(xué)座位預(yù)約功能
這篇文章主要介紹了如何用Python實(shí)現(xiàn)大學(xué)座位預(yù)約,今天這個(gè)教程教你如何搶到座位,有座位了還怕聽不到課嗎?感興趣的朋友一起看看吧2022-03-03