亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Selenium基于PIL實現拼接滾動截圖的方法

發布時間:2020-08-04 13:42:16 來源:億速云 閱讀:281 作者:小豬 欄目:開發技術

這篇文章主要講解了Selenium基于PIL實現拼接滾動截圖的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

Selenium默認的截圖save_screenshot只支持對當前窗口內容進行截圖,當如果你想要截取整個網頁,那么,可以明確的告訴你。
Selenium做不到。

你可以手工使用開發者工具Ctrl+Shift+P調出命令行菜單,執行Capture full screenshot命令進行截圖,如下圖圖:

Selenium基于PIL實現拼接滾動截圖的方法

也可以通過

Selenium Webdriver的 execute_cdp_cmd()來調用一下Chrome DevTools Protocal提供的方法。但是,很遺憾,沒有全屏截圖的方法。

Selenium2時,還可以使用Firefox全屏截圖。Selenium3之后,所有瀏覽器不再支持。

一種方式是使用aShot,一個jar包,這顯然是Java派的解決方案。

另外如果對樣式沒有強迫癥的話,可以通過滾動頁面截取多張+PIL圖片拼接的方式實現全屏的截圖。

示例代碼:

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') # 頁面高度
driver.save_screenshot('qq.png')

if page_height > window_height:
  n = page_height // window_height # 需要滾動的次數
  base_mat = np.atleast_2d(Image.open('qq.png')) # 打開截圖并轉為二維矩陣

  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')) # 打開截圖并轉為二維矩陣
    base_mat = np.append(base_mat, mat, axis=0) # 拼接圖片的二維矩陣
  Image.fromarray(base_mat).save('hao123.png')

driver.quit()

需要安裝PIL和numpy: pip install PIL numpy

上例中,全屏窗口以獲得最大展示范圍,通過get_window_size()獲取屏幕高度,通過執行js,獲取頁面高度。
相除后獲得滾動次數。

每次滾動后,截圖保存,然后使用Image打開轉換為二維矩陣拼接到上一個圖片的二維矩陣中。

循環完,最后再將拼接的二維矩陣輸出成圖片。

效果展示,如下圖:

Selenium基于PIL實現拼接滾動截圖的方法

注意:如果是流式加載的頁面,頁面高度是不斷變長的,非固定為第一次獲取到的page_height的值,需要另外處理

看完上述內容,是不是對Selenium基于PIL實現拼接滾動截圖的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

峡江县| 西平县| 宜君县| 土默特右旗| 木里| 宜昌市| 开鲁县| 同仁县| 仙居县| 海阳市| 湖北省| 南投市| 南城县| 托克逊县| 宣汉县| 武宁县| 志丹县| 和田县| 新晃| 松滋市| 图们市| 南涧| 衡水市| 西乌珠穆沁旗| 浮梁县| 长沙市| 西昌市| 宁强县| 巍山| 兴和县| 五原县| 杭锦旗| 卓尼县| 香格里拉县| 白水县| 汉中市| 邵阳县| 乌拉特前旗| 临安市| 海城市| 儋州市|