使用Python和Selenium構(gòu)建一個自動化圖像引擎
本篇指南將教你如何使用Python和Selenium庫來構(gòu)建一個自動化圖像引擎,該引擎能夠根據(jù)指定參數(shù)自動截取網(wǎng)頁快照,并將生成的圖片存儲到云端。此工具還可以通過消息隊(duì)列接收任務(wù)指令,非常適合需要批量處理網(wǎng)頁截圖的應(yīng)用場景。
1. 準(zhǔn)備環(huán)境
確保你已經(jīng)安裝了Python和必要的庫:
pip install selenium oss2 kafka-python-ng
2. 創(chuàng)建配置文件
創(chuàng)建一個簡單的config.ini文件來存儲你的OSS和Kafka設(shè)置:
[oss] access_key_id = YOUR_OSS_ACCESS_KEY_ID access_key_secret = YOUR_OSS_ACCESS_KEY_SECRET bucket_name = YOUR_BUCKET_NAME endpoint = http://oss-cn-hangzhou.aliyuncs.com [kafka] bootstrap_servers = localhost:9092 topic = your_topic_name notify_topic = your_notify_topic consumer_group = your_consumer_group [engine] driver_path = path/to/chromedriver image_path = path/to/screenshots param_path = path/to/params site_base_path = https://example.com
3. 設(shè)置日志記錄
為程序添加基本的日志記錄功能,以便于調(diào)試:
import logging
from logging.handlers import TimedRotatingFileHandler
import os
logger = logging.getLogger('image_engine')
logger.setLevel(logging.DEBUG)
log_file = 'logs/image_engine.log'
os.makedirs('logs', exist_ok=True)
handler = TimedRotatingFileHandler(log_file, when='midnight', backupCount=7, encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
4. 初始化Selenium WebDriver
初始化Chrome WebDriver,并設(shè)置窗口最大化:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 讀取配置文件
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
service = Service(config.get('engine', 'driver_path'))
driver = webdriver.Chrome(service=service)
driver.maximize_window()
5. 圖像處理邏輯
編寫一個函數(shù)來處理每個Kafka消息,打開指定網(wǎng)頁,等待頁面加載完成,然后保存截圖:
from kafka import KafkaConsumer, KafkaProducer
import json
import time
from datetime import datetime
import oss2
def process_task(msg):
task_params = json.loads(msg.value)
item_id = task_params['itemId']
param_value = task_params['paramValue']
logger.info(f"開始處理項(xiàng)【{item_id}】對應(yīng)參數(shù)【{param_value}】")
# 構(gòu)建請求鏈接
url = f"{config.get('engine', 'site_base_path')}/view?param={param_value}&id={item_id}"
driver.get(url)
try:
# 簡單等待頁面加載
time.sleep(3) # 根據(jù)需要調(diào)整或替換為WebDriverWait
# 生成截圖文件名
today = datetime.now().strftime('%Y-%m-%d')
screenshot_dir = os.path.join(config.get('engine', 'image_path'), 'images', today)
os.makedirs(screenshot_dir, exist_ok=True)
fname = os.path.join(screenshot_dir, f"{item_id}_{param_value}.png")
driver.save_screenshot(fname)
logger.info(f"保存截圖到 {fname}")
# 上傳至OSS(省略具體實(shí)現(xiàn),根據(jù)實(shí)際情況添加)
upload_to_oss(fname)
# 發(fā)送完成通知
notify_completion(item_id, param_value, fname)
logger.info(f"完成處理項(xiàng)【{item_id}】對應(yīng)參數(shù)【{param_value}】")
except Exception as e:
logger.error(f"處理項(xiàng)【{item_id}】對應(yīng)參數(shù)【{param_value}】時(shí)發(fā)生異常: {e}")
def upload_to_oss(file_path):
"""上傳文件到阿里云OSS"""
auth = oss2.Auth(config.get('oss', 'access_key_id'), config.get('oss', 'access_key_secret'))
bucket = oss2.Bucket(auth, config.get('oss', 'endpoint'), config.get('oss', 'bucket_name'))
remote_path = os.path.relpath(file_path, config.get('engine', 'image_path'))
bucket.put_object_from_file(remote_path, file_path)
def notify_completion(item_id, param_value, image_path):
"""發(fā)送完成通知"""
producer.send(config.get('kafka', 'notify_topic'), {
'itemId': item_id,
'paramValue': param_value,
'imagePath': image_path
})
6. 啟動Kafka消費(fèi)者
啟動Kafka消費(fèi)者,監(jiān)聽消息并調(diào)用處理函數(shù):
if __name__ == "__main__":
consumer = KafkaConsumer(
config.get('kafka', 'topic'),
bootstrap_servers=config.get('kafka', 'bootstrap_servers').split(','),
group_id=config.get('kafka', 'consumer_group'),
auto_offset_reset='latest',
enable_auto_commit=True,
value_deserializer=lambda m: m.decode('utf-8')
)
for msg in consumer:
try:
process_task(msg)
except Exception as ex:
logger.error(f"消費(fèi)消息發(fā)生異常: {ex}")
總結(jié)
通過上述簡化步驟,你可以快速搭建一個基于Python和Selenium的圖像引擎。該引擎能夠從Kafka接收任務(wù)指令,訪問指定網(wǎng)站,截取頁面快照,并將截圖上傳到阿里云OSS。此版本去除了不必要的復(fù)雜性,專注于核心功能的實(shí)現(xiàn)。
到此這篇關(guān)于使用Python和Selenium構(gòu)建一個自動化圖像引擎的文章就介紹到這了,更多相關(guān)Python Selenium構(gòu)建圖像引擎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python編寫一個驗(yàn)證碼圖片數(shù)據(jù)標(biāo)注GUI程序附源碼
這篇文章主要介紹了Python編寫一個驗(yàn)證碼圖片數(shù)據(jù)標(biāo)注GUI程序,本文給大家附上小編精心整理的源碼,需要的朋友可以參考下2019-12-12
使用Python的requests庫來發(fā)送HTTP請求的操作指南
使用 Python 的 requests 庫發(fā)送 HTTP 請求是非常簡單和直觀的,requests 庫提供了豐富的 API,可以發(fā)送各種類型的 HTTP 請求,下面我會介紹一些常用的 HTTP 請求方式,并提供實(shí)際的代碼示例,需要的朋友可以參考下2025-08-08
解決Python2.7中IDLE啟動沒有反應(yīng)的問題
今天小編就為大家分享一篇解決Python2.7中IDLE啟動沒有反應(yīng)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
基于Python編寫一個單位轉(zhuǎn)換(長度/溫度)工具
這篇文章主要為大家詳細(xì)介紹了如何開發(fā)一個Python單位轉(zhuǎn)換工具,核心是通過嵌套字典存儲各類單位轉(zhuǎn)換關(guān)系,包括長度、溫度等,感興趣的小伙伴可以了解下2025-05-05
PyTorch詳解經(jīng)典網(wǎng)絡(luò)種含并行連結(jié)的網(wǎng)絡(luò)GoogLeNet實(shí)現(xiàn)流程
今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)GoogLeNet的方法,GoogLeNet提出了一個名為“Inception”的深度卷積神經(jīng)網(wǎng)結(jié)構(gòu),其目標(biāo)是將分類、識別ILSVRC14數(shù)據(jù)集的技術(shù)水平提高一個層次。這一結(jié)構(gòu)的主要特征是對網(wǎng)絡(luò)內(nèi)部計(jì)算資源的利用進(jìn)行了優(yōu)化2022-05-05
python 如何用map()函數(shù)創(chuàng)建多線程任務(wù)
這篇文章主要介紹了python 使用map()函數(shù)創(chuàng)建多線程任務(wù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
淺談Python的自省Introspection和反射機(jī)制Reflection
這篇文章主要介紹了淺談Python的自省Introspection和反射機(jī)制Reflection,反射就是通過字符串的形式去對象(模塊)中操作(查找/獲取/刪除/添加)成員,一種基于字符串的事件驅(qū)動,需要的朋友可以參考下2023-08-08
小學(xué)生也能看懂的python語法之循環(huán)語句精解
這篇文章主要介紹了詳解Python中的條件,循環(huán)語句,包括while循環(huán)for循環(huán),循環(huán)語句是學(xué)習(xí)各個編程語言的最基本的基礎(chǔ)知識,需要的朋友可以參考下2021-09-09

