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

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

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

一、背景

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

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

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

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

二、Chrome無(wú)頭瀏覽器+驅(qū)動(dòng)下載安裝

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

1、google-chrome-stable下載安裝

#1、安裝google-chrome-stable的依賴(lài)
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ū)動(dòng)

# 下載安裝包
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版本完全一致,否則會(huì)出現(xiàn)兼容性問(wèn)題
chromedriver --version

三、Python樣例代碼

1、pip3安裝依賴(lài)

pip3 install selenium
 
pip3 install pillow

2、樣例代碼

訪問(wèn)https://qq.com 騰訊門(mén)戶(hù)網(wǎng)站,將騰訊網(wǎng)截圖保存下來(lái)。  如果是自己的業(yè)務(wù),那么傳遞cookie這些參考文檔傳遞即可。此時(shí),您就當(dāng)你的程序就是一個(gè)chorme瀏覽器,chrome瀏覽器能做的事情,你的代碼就能做。 只是平時(shí)我們使用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')  # 無(wú)頭參數(shù)
 
    output_path = "./screenshots"
    # 啟動(dòng)瀏覽器
    driver = Chrome(options=options)
    driver.maximize_window()
    try:
        # 訪問(wèn)頁(yè)面
        url = 'https://qq.com'
        driver.get(url)
        time.sleep(1)
        # 設(shè)置截屏整個(gè)網(wǎng)頁(yè)的寬度以及高度
        scroll_width = 2500
        scroll_height = 9500
        driver.set_window_size(scroll_width, scroll_height)
 
        # 獲取頁(yè)面高度
        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)
 
        # 滾動(dòng)并截屏
        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針對(duì)爬蟲(chóng)這塊包很多,也很擅長(zhǎng), 腳本簡(jiǎn)單清晰。倒是也沒(méi)必要上Go、Java之類(lèi)的,Python處理這類(lèi)問(wèn)題信手拈來(lái),效率高才是王道! 

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

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

相關(guān)文章

  • python爬蟲(chóng)lxml庫(kù)解析xpath網(wǎng)頁(yè)過(guò)程示例

    python爬蟲(chóng)lxml庫(kù)解析xpath網(wǎng)頁(yè)過(guò)程示例

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

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

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

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

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

    python logging通過(guò)json文件配置的步驟

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

沾化县| 绍兴县| 临汾市| 夏河县| 阳城县| 杨浦区| 梁平县| 陈巴尔虎旗| 东海县| 江津市| 黔西县| 永丰县| 仙居县| 罗江县| 安吉县| 四会市| 林口县| 济源市| 云林县| 香河县| 河西区| 黎城县| 饶平县| 斗六市| 炎陵县| 呼和浩特市| 南城县| 扎赉特旗| 苗栗县| 台湾省| 景德镇市| 扎兰屯市| 荆州市| 图木舒克市| 高陵县| 鄂托克旗| 波密县| 温泉县| 高唐县| 柘荣县| 浦城县|