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做不到。
你可以手工使用開(kāi)發(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')) # 打開(kāi)截圖并轉(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')) # 打開(kāi)截圖并轉(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打開(kāi)轉(zhuǎn)換為二維矩陣拼接到上一個(gè)圖片的二維矩陣中。
循環(huán)完,最后再將拼接的二維矩陣輸出成圖片。
效果展示,如下圖:

注意:如果是流式加載的頁(yè)面,頁(yè)面高度是不斷變長(zhǎng)的,非固定為第一次獲取到的page_height的值,需要另外處理
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python中的selenium實(shí)現(xiàn)自動(dòng)向下滾動(dòng)頁(yè)面并指定最大滑動(dòng)距離
- Selenium及python實(shí)現(xiàn)滾動(dòng)操作多種方法
- Selenium 滾動(dòng)頁(yè)面至元素可見(jiàn)的方法
- 淺談selenium如何應(yīng)對(duì)網(wǎng)頁(yè)內(nèi)容需要鼠標(biāo)滾動(dòng)加載的問(wèn)題
- python中selenium操作下拉滾動(dòng)條的幾種方法匯總
- Python Selenium 滾動(dòng)到特定元素的幾種實(shí)現(xiàn)方法
相關(guān)文章
解決django前后端分離csrf驗(yàn)證的問(wèn)題
今天小編就為大家分享一篇解決django前后端分離csrf驗(yàn)證的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
pycharm上的python虛擬環(huán)境移到離線機(jī)器上的方法步驟
本人在工作中需要在離線Windows環(huán)境中使用,本文主要介紹了pycharm上的python虛擬環(huán)境移到離線機(jī)器上的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2021-10-10
PyTorch?使用torchvision進(jìn)行圖片數(shù)據(jù)增廣
本文主要介紹了PyTorch?使用torchvision進(jìn)行圖片數(shù)據(jù)增廣,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
python中struct模塊之字節(jié)型數(shù)據(jù)的處理方法
今天小編就為大家分享一篇python中struct模塊之字節(jié)型數(shù)據(jù)的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
OpenCV python sklearn隨機(jī)超參數(shù)搜索的實(shí)現(xiàn)
這篇文章主要介紹了OpenCV python sklearn隨機(jī)超參數(shù)搜索的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
python制作機(jī)器人的實(shí)現(xiàn)方法
機(jī)器人自動(dòng)回復(fù)在很多場(chǎng)景中都可以用的上,本文主要介紹了python制作機(jī)器人的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Python使用pip工具實(shí)現(xiàn)包自動(dòng)更新的多種方法
本文深入探討了使用Python的pip工具實(shí)現(xiàn)包自動(dòng)更新的各種方法和技術(shù),我們將從基礎(chǔ)概念開(kāi)始,逐步介紹手動(dòng)更新方法、自動(dòng)化腳本編寫、結(jié)合CI/CD的實(shí)現(xiàn)方案,以及最佳實(shí)踐和安全考量,文章包含詳細(xì)的代碼示例、流程圖解和實(shí)際應(yīng)用場(chǎng)景分析,需要的朋友可以參考下2025-07-07
Python標(biāo)準(zhǔn)庫(kù)shutil用法實(shí)例詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)shutil用法,結(jié)合實(shí)例形式分析了shutil庫(kù)針對(duì)文件與文件夾各種常見(jiàn)操作技巧與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2018-08-08

