最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Selenium實(shí)現(xiàn)無頭瀏覽器網(wǎng)頁截圖

 更新時間:2025年03月13日 09:01:45   作者:程序員Rocky  
這篇文章主要為大家詳細(xì)介紹了Python+Selenium實(shí)現(xiàn)無頭瀏覽器網(wǎng)頁截圖的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、背景

最近有個需求,就是需要登錄系統(tǒng),針對系統(tǒng)的流程數(shù)據(jù),有一個工作流程圖或者說叫審批流程圖。每個階段都有相對應(yīng)的人員審批、評論信息,以及是否通過等等。這些信息都需要進(jìn)行網(wǎng)頁截圖。

 這些信息人事需要進(jìn)行歸檔和壓縮,如果是人工操作,里面的流程有將近10w+的數(shù)據(jù)條目。 這如果讓人工實(shí)現(xiàn)實(shí)在是頭大,根本無法完成這個巨大的工作量。

自然這種事情落到了我的頭上,誰讓我們會搞程序呢,呵呵。  我采用的Python3+Selenium的方式,模擬登錄比較麻煩需要驗(yàn)證碼各種,我直接使用人事賬號的登錄cookie即可實(shí)現(xiàn)登錄,那接下來就是訪問頁面就可以。  訪問到對應(yīng)頁面進(jìn)行截圖保存,然后又繼續(xù)翻頁,繼續(xù)截圖,以此類推。

腦海里就浮現(xiàn)了我的實(shí)現(xiàn)邏輯。說干就干。

二、Chrome無頭瀏覽器+驅(qū)動下載安裝

注意事項(xiàng):   google-chrome-stable和chromedriver最好保持一致的版本,否則可能會出現(xiàn)兼容性報錯的情況!!!!

1、google-chrome-stable下載安裝

#1、安裝google-chrome-stable的依賴
yum install -y atk at-spi2-atk libdrm mesa-libgbm gtk3 vulkan xdg-utils
#安裝中文字體
yum install -y wqy-microhei-fonts
 
#2、下載rpm安裝包
https://mirrors.aliyun.com/google-chrome/google-chrome/google-chrome-stable-110.0.5481.77-1.x86_64.rpm
 
#3、安裝
 
rpm -ivh google-chrome-stable-110.0.5481.77-1.x86_64.rpm
 
#4、查看版本信息
google-chrome-stable --version

顯示版本信息如下,表示google-chrome-stable安裝成功:

2、安裝chromedriver驅(qū)動

# 下載安裝包
wget "https://registry.npmmirror.com/-/binary/chromedriver/110.0.5481.77/chromedriver_linux64.zip"
 
# 解壓
unzip chromedriver_linux64.zip -d /usr/local/chromedriver
 
# 設(shè)置環(huán)境變量
 
export CHROME_DRIVER=/usr/local/chromedriver
export PATH=$PATH:$CHROME_DRIVER
 
# 驗(yàn)證chromedriver版本是否與google-chrome-stable版本完全一致,否則會出現(xiàn)兼容性問題
chromedriver --version

三、Python樣例代碼

1、pip3安裝依賴

pip3 install selenium
 
pip3 install pillow

2、樣例代碼

訪問https://qq.com 騰訊門戶網(wǎng)站,將騰訊網(wǎng)截圖保存下來。  如果是自己的業(yè)務(wù),那么傳遞cookie這些參考文檔傳遞即可。此時,您就當(dāng)你的程序就是一個chorme瀏覽器,chrome瀏覽器能做的事情,你的代碼就能做。 只是平時我們使用chrome是鼠標(biāo)點(diǎn)點(diǎn)點(diǎn),換到代碼就是調(diào)用API函數(shù)即可。

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import time
import os.path
from PIL import Image
 
def mergeImage(output_path):
    images = [Image.open(os.path.join(output_path, f"screenshot_{i}.png")) for i in range(scrolls)]
    widths, heights = zip(*(i.size for i in images))
 
    total_width = max(widths)
    total_height = sum(heights)
 
    new_image = Image.new('RGB', (total_width, total_height))
    y_offset = 0
    for img in images:
        new_image.paste(img, (0, y_offset))
        y_offset += img.height
 
    final_screenshot_path = os.path.join(output_path, "final_screenshot.png")
    new_image.save(final_screenshot_path)
    print(f"Final screenshot saved to {final_screenshot_path}")
 
 
if __name__ == "__main__":
    # 設(shè)置瀏覽器
    options = Options()
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-gpu')
    options.add_argument('--headless')  # 無頭參數(shù)
 
    output_path = "./screenshots"
    # 啟動瀏覽器
    driver = Chrome(options=options)
    driver.maximize_window()
    try:
        # 訪問頁面
        url = 'https://qq.com'
        driver.get(url)
        time.sleep(1)
        # 設(shè)置截屏整個網(wǎng)頁的寬度以及高度
        scroll_width = 2500
        scroll_height = 9500
        driver.set_window_size(scroll_width, scroll_height)
 
        # 獲取頁面高度
        total_height = driver.execute_script("return document.body.scrollHeight")
        viewport_height = driver.execute_script("return window.innerHeight")
        scrolls = int(total_height / viewport_height) + 1
 
        # 創(chuàng)建輸出目錄
        if not os.path.exists(output_path):
            os.makedirs(output_path)
 
        # 滾動并截屏
        for i in range(scrolls):
            y_offset = i * viewport_height
            driver.execute_script(f"window.scrollTo(0, {y_offset});")
            time.sleep(1)  # 等待內(nèi)容加載
            screenshot_path = os.path.join(output_path, f"screenshot_{i}.png")
            driver.get_screenshot_as_file(screenshot_path)
            print(f"Saved {screenshot_path}")
 
        # 合并圖片
        mergeImage(output_path)
 
        # 關(guān)閉瀏覽器
        driver.close()
        driver.quit()
 
    except Exception as e:
        print(e)
 

3、成功保存截圖

四、總結(jié)

使用Python的原因是,Python針對爬蟲這塊包很多,也很擅長, 腳本簡單清晰。倒是也沒必要上Go、Java之類的,Python處理這類問題信手拈來,效率高才是王道! 

Selenium就是個自動化測試框架,底層還可以切換控制Chrome、火狐等等相關(guān)瀏覽器驅(qū)動。 

以上就是Python+Selenium實(shí)現(xiàn)無頭瀏覽器網(wǎng)頁截圖的詳細(xì)內(nèi)容,更多關(guān)于Python無頭瀏覽器截圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python爬蟲lxml庫解析xpath網(wǎng)頁過程示例

    python爬蟲lxml庫解析xpath網(wǎng)頁過程示例

    這篇文章主要為大家介紹了python爬蟲lxml庫解析xpath網(wǎng)頁的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Django項(xiàng)目的初步創(chuàng)建與簡單配置

    Django項(xiàng)目的初步創(chuàng)建與簡單配置

    本文主要介紹了Django項(xiàng)目的初步創(chuàng)建與簡單配置,詳細(xì)介紹了如何安裝和配置Django,包括創(chuàng)建項(xiàng)目、數(shù)據(jù)庫配置、路由等,通過本文可以了解如何使用Django創(chuàng)建自己的Web應(yīng)用程序
    2023-09-09
  • 探索Python中雙下劃線的特殊方法屬性魔法世界

    探索Python中雙下劃線的特殊方法屬性魔法世界

    這篇文章主要為大家介紹了Python中雙下劃線的特殊方法屬性魔法世界探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python logging通過json文件配置的步驟

    python logging通過json文件配置的步驟

    這篇文章主要介紹了python logging通過json文件配置的步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 用python進(jìn)行線性/非線性擬合的三種方法

    用python進(jìn)行線性/非線性擬合的三種方法

    這篇文章主要給大家介紹了關(guān)于用python進(jìn)行線性/非線性擬合的三種方法,數(shù)據(jù)分析中經(jīng)常會使用到數(shù)據(jù)擬合,文中通過實(shí)例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請求

    PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請求

    本篇文章給大家分享了PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請求的詳細(xì)方法和實(shí)例代碼,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-06-06
  • 使用Python給PDF添加文本超鏈接和圖片超鏈接

    使用Python給PDF添加文本超鏈接和圖片超鏈接

    超鏈接是指向特定資源的鏈接,作為一種有效的導(dǎo)航工具,它能夠幫助讀者快速訪問相關(guān)信息,通過在PDF文檔中添加文本超鏈接和圖片超鏈接,你可以顯著提升文檔的互動性和用戶體驗(yàn),這篇文章將詳細(xì)介紹如何使用Python給PDF添加文本超鏈接和圖片超鏈接,需要的朋友可以參考下
    2025-03-03
  • python進(jìn)階之logging日志模塊的使用

    python進(jìn)階之logging日志模塊的使用

    Python?logging模塊功能強(qiáng)大,支持多級別、多輸出、格式化,核心組件,下面就來具體介紹一下logging日志模塊的使用,具有一定的參考價值,感興趣的可以了解一下
    2025-08-08
  • Python在PDF中添加或刪除超鏈接的操作

    Python在PDF中添加或刪除超鏈接的操作

    PDF文件現(xiàn)已成為文檔存儲和分發(fā)的首選格式,然而,PDF文件的靜態(tài)特性有時會限制其交互性,超鏈接是提高PDF文件互動性和用戶體驗(yàn)的關(guān)鍵元素,本文將詳細(xì)介紹如何使用第三方庫Spire.PDF for Python來進(jìn)行這些操作,需要的朋友可以參考下
    2024-12-12
  • python帶參數(shù)打包exe及調(diào)用方式

    python帶參數(shù)打包exe及調(diào)用方式

    今天小編就為大家分享一篇python帶參數(shù)打包exe及調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

阿拉善盟| 商水县| 高州市| 沁源县| 阿尔山市| 班戈县| 弥渡县| 彭州市| 北京市| 南宁市| 清徐县| 凤阳县| 青田县| 城市| 华容县| 卢龙县| 城步| 双鸭山市| 方城县| 富源县| 梁山县| 北碚区| 都兰县| 阿合奇县| 老河口市| 自治县| 定西市| 金华市| 波密县| 左贡县| 双柏县| 辽阳市| 壶关县| 永丰县| 凤庆县| 汨罗市| 玉溪市| 卢龙县| 突泉县| 华安县| 化州市|