Python使用Selenium將網(wǎng)頁保存為圖片或PDF
一、背景介紹
之前寫過一篇將網(wǎng)頁保存為圖片的文章
這里有個弊端,C# WebBrowser使用的是IE內(nèi)核,目前很多網(wǎng)站都不支持IE了,所以需要找新的方案替代。
二、Python實現(xiàn)
在Python中,一個常見的選擇是使用Selenium配合Pillow將網(wǎng)頁保存為圖片。
第1步:安裝Python環(huán)境。
如未安裝,請參考從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級功能(最新推薦)
第2步:安裝Selenium庫。
如果你還沒有安裝它們,可以使用pip來安裝:
打開windows命令行工具,輸入以下命令:
pip install selenium pillow
第3步:下載Chrome瀏覽器、ChromeDriver
使用Selenium需要一個WebDriver,比如ChromeDriver。

注意:下載的ChromeDriver需與使用的Chrome瀏覽器版本保持一致。

下載完后,報存到電腦任一目錄即可,如:

ChromeDriver官方下載地址可能打不開,可以使用華為提供的鏡像。
Index of chromedriver-local 各個版本都有,找到與自己Chrome的版本一致,下載即可。
第4步:編寫代碼將網(wǎng)頁保存為圖片
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from PIL import Image
import io
# 設(shè)置Chrome選項
chrome_options = Options()
chrome_options.add_argument("--headless") # 無頭模式,不打開瀏覽器窗口
chrome_options.add_argument("--disable-gpu")
# 指定ChromeDriver的路徑
service = Service(executable_path='C:\\chromedriver-win64\\chromedriver.exe')
# 創(chuàng)建WebDriver對象
driver = webdriver.Chrome(service=service, options=chrome_options)
# 訪問目標網(wǎng)頁
driver.get('https://blog.csdn.net/a497785609')
# 獲取頁面的實際高度和寬度
width = driver.execute_script("return document.documentElement.scrollWidth")
height = driver.execute_script("return document.documentElement.scrollHeight")
# 設(shè)置窗口大小
driver.set_window_size(width, height)
# 截圖并保存
driver.save_screenshot('C:\\chromedriver-win64\\screenshot.png')
# 使用Pillow處理圖像(可選)
image = Image.open(io.BytesIO(driver.get_screenshot_as_png()))
image.show()
# 關(guān)閉瀏覽器
driver.quit()至此,使用Python+Chrome即可將網(wǎng)頁保存為圖片了。
第5步:將網(wǎng)頁保存為PDF
使用ChromeDriver+DevTools,可以將網(wǎng)頁保存為PDF。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from PIL import Image
import io
import base64
# 設(shè)置Chrome選項
chrome_options = Options()
chrome_options.add_argument("--headless") # 無頭模式,不打開瀏覽器窗口
chrome_options.add_argument("--disable-gpu")
# ChromeDriver路徑
ChromeDriver = 'C:\\chromedriver-win64\\chromedriver.exe'
# 訪問目標網(wǎng)頁
url = 'https://blog.csdn.net/a497785609'
# 保存PDF文件的路徑
file_name = "C:\\test.pdf"
# 指定ChromeDriver的路徑
service = Service(executable_path=ChromeDriver)
# 創(chuàng)建WebDriver對象
driver = webdriver.Chrome(service=service, options=chrome_options)
# 訪問目標網(wǎng)頁
driver.get(url)
# 獲取頁面的實際高度和寬度
width = driver.execute_script("return document.documentElement.scrollWidth")
height = driver.execute_script("return document.documentElement.scrollHeight")
# 設(shè)置窗口大小
driver.set_window_size(width, height)
# 【打印為PDF】
# 調(diào)用 Chrome DevTools 的 printToPDF 方法,打印參數(shù)參考:https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
pdf_data = driver.execute_cdp_cmd("Page.printToPDF", {"landscape": False,
"displayHeaderFooter": False,
"printBackground": False,
"scale": 1.0, # 必須是 float
"paperWidth": 8.5, # A4紙寬度(英寸)
"paperHeight": 11.0, # A4紙高度(英寸)
"marginTop": 0.5,
"marginBottom": 0.5,
"marginLeft": 0.5,
"marginRight": 0.5})
# 解碼并寫入 PDF 文件
with open(file_name, "wb") as f:
f.write(base64.b64decode(pdf_data['data']))
print(" 已保存到文件:"+file_name)
# 關(guān)閉瀏覽器
driver.quit()
到此這篇關(guān)于Python使用Selenium將網(wǎng)頁保存為圖片或PDF的文章就介紹到這了,更多相關(guān)Python網(wǎng)頁保存為圖片或PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python+Selenium瀏覽器自動化測試與網(wǎng)頁自動登錄
- Python自動化測試框架:unittest、pytest、Selenium、requests和Pytest-BDD
- Python使用Selenium實現(xiàn)Web自動化的完整指南
- 從零開始學習Python Selenium瀏覽器元素定位與實戰(zhàn)技巧
- 從入門到精通解析Python Selenium如何模擬瀏覽器操作
- Python使用Selenium實現(xiàn)自動化網(wǎng)頁批量錄入
- Python Selenium 滾動到特定元素的幾種實現(xiàn)方法
- python中selenium安裝配置與使用示例
- Python使用Selenium檢查元素是否存在的方法
- python利用Selenium搭建免費Web搜索API服務(wù)的方法
相關(guān)文章
python文件操作seek()偏移量,讀取指正到指定位置操作
這篇文章主要介紹了python文件操作seek()偏移量,讀取指正到指定位置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用
Series是帶標簽的一維數(shù)組,可存儲整數(shù)、浮點數(shù)、字符串、Python 對象等類型的數(shù)據(jù),軸標簽統(tǒng)稱為索引,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用,需要的朋友可以參考下2022-06-06
python基于tkinter點擊按鈕實現(xiàn)圖片的切換
這篇文章主要介紹了python基于tkinter點擊按鈕實現(xiàn)圖片的切換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04

