欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)截圖,以此類推。

腦海里就浮現(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的依賴
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安裝依賴

pip3 install selenium
 
pip3 install pillow

2、樣例代碼

訪問(wèn)https://qq.com 騰訊門戶網(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ì)爬蟲這塊包很多,也很擅長(zhǎng), 腳本簡(jiǎn)單清晰。倒是也沒必要上Go、Java之類的,Python處理這類問(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)文章

  • 如何搭建pytorch環(huán)境的方法步驟

    如何搭建pytorch環(huán)境的方法步驟

    這篇文章主要介紹了如何搭建pytorch環(huán)境的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python內(nèi)置函數(shù)OCT詳解

    Python內(nèi)置函數(shù)OCT詳解

    本文給大家介紹的是python中的內(nèi)置函數(shù)oct(),其主要作用是將十進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制,再變成字符。有需要的小伙伴可以參考下
    2016-11-11
  • python協(xié)程異步IO中asyncio的使用

    python協(xié)程異步IO中asyncio的使用

    這篇文章主要介紹了python異步編程之a(chǎn)syncio的使用,python中異步IO操作是通過(guò)asyncio來(lái)實(shí)現(xiàn)的,為了更加詳細(xì)說(shuō)明asyncio,我們先從協(xié)程的最基礎(chǔ)開始講解
    2023-12-12
  • Hadoop中的Python框架的使用指南

    Hadoop中的Python框架的使用指南

    這篇文章主要介紹了Hadoop中的Python框架的使用指南,Hadoop一般使用復(fù)雜的Java操作,但通過(guò)該框架使得Python腳本操作Hadoop成為了可能,需要的朋友可以參考下
    2015-04-04
  • wxpython中利用線程防止假死的實(shí)現(xiàn)方法

    wxpython中利用線程防止假死的實(shí)現(xiàn)方法

    上午抽空學(xué)習(xí)了一下在wxpython中啟用線程的方法,將GUI和功能的執(zhí)行分開,果然程序運(yùn)行起來(lái)杠杠滴。因?yàn)槲夷莻€(gè)軟件的代碼暫時(shí)不能公開,這里專門寫個(gè)小程序,作為今天的筆記吧
    2014-08-08
  • python3 如何解壓縮.gz文件

    python3 如何解壓縮.gz文件

    這篇文章主要介紹了python3 如何解壓縮.gz文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 如何使用?Python為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭

    如何使用?Python為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭

    這篇文章主要介紹了使用?Python為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭,在?Python?的幫助下,不再?gòu)?qiáng)制開啟攝像頭,將向你展示如何為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭,需要的朋友可以參考下
    2022-08-08
  • python隨機(jī)生成庫(kù)faker庫(kù)api實(shí)例詳解

    python隨機(jī)生成庫(kù)faker庫(kù)api實(shí)例詳解

    今天小編就為大家分享一篇python隨機(jī)生成庫(kù)faker庫(kù)api實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • python實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到excel的示例--普通格式

    python實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到excel的示例--普通格式

    今天小編就為大家分享一篇python實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到excel的示例--普通格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python告訴你木馬程序的鍵盤記錄原理

    Python告訴你木馬程序的鍵盤記錄原理

    今天小編就為大家分享一篇關(guān)于Python告訴你木馬程序的鍵盤記錄原理,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02

最新評(píng)論