广告位联系
返回顶部
分享到

使用Python和Selenium构建一个自动化图像引擎

python 来源:互联网 作者:佚名 发布时间:2024-12-12 22:43:00 人浏览
摘要

本篇指南将教你如何使用Python和Selenium库来构建一个自动化图像引擎,该引擎能够根据指定参数自动截取网页快照,并将生成的图片存储到云端。此工具还可以通过消息队列接收任务指令,非常

本篇指南将教你如何使用Python和Selenium库来构建一个自动化图像引擎,该引擎能够根据指定参数自动截取网页快照,并将生成的图片存储到云端。此工具还可以通过消息队列接收任务指令,非常适合需要批量处理网页截图的应用场景。

1. 准备环境

确保你已经安装了Python和必要的库:

1

pip install selenium oss2 kafka-python-ng

2. 创建配置文件

创建一个简单的config.ini文件来存储你的OSS和Kafka设置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[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. 设置日志记录

为程序添加基本的日志记录功能,以便于调试:

1

2

3

4

5

6

7

8

9

10

11

12

13

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,并设置窗口最大化:

1

2

3

4

5

6

7

8

9

10

11

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. 图像处理逻辑

编写一个函数来处理每个Kafka消息,打开指定网页,等待页面加载完成,然后保存截图:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

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"开始处理项【{item_id}】对应参数【{param_value}】")

     

    # 构建请求链接

    url = f"{config.get('engine', 'site_base_path')}/view?param={param_value}&id={item_id}"

    driver.get(url)

     

    try:

        # 简单等待页面加载

        time.sleep(3)  # 根据需要调整或替换为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(省略具体实现,根据实际情况添加)

        upload_to_oss(fname)

         

        # 发送完成通知

        notify_completion(item_id, param_value, fname)

         

        logger.info(f"完成处理项【{item_id}】对应参数【{param_value}】")

    except Exception as e:

        logger.error(f"处理项【{item_id}】对应参数【{param_value}】时发生异常: {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):

    """发送完成通知"""

    producer.send(config.get('kafka', 'notify_topic'), {

        'itemId': item_id,

        'paramValue': param_value,

        'imagePath': image_path

    })

6. 启动Kafka消费者

启动Kafka消费者,监听消息并调用处理函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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"消费消息发生异常: {ex}")

总结

通过上述简化步骤,你可以快速搭建一个基于Python和Selenium的图像引擎。该引擎能够从Kafka接收任务指令,访问指定网站,截取页面快照,并将截图上传到阿里云OSS。此版本去除了不必要的复杂性,专注于核心功能的实现。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python图形化工具对比
    Tkinter:Python内置的图形化库 Tkinter是Python的标准GUI库,它简单易用,适合初学者。Tkinter提供了创建窗口、按钮、文本框等常见控件的功能,
  • 使用Python和Selenium构建一个自动化图像引擎
    本篇指南将教你如何使用Python和Selenium库来构建一个自动化图像引擎,该引擎能够根据指定参数自动截取网页快照,并将生成的图片存储到云
  • 怎么创建Python虚拟环境venv
    创建 Python 虚拟环境是一个很好的实践,可以帮助我们管理项目的依赖项,避免不同项目之间的冲突。以下是使用venv模块创建 Python 虚拟环境
  • Python实现Ollama的提示词生成与优化
    1. 基础环境配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import requests import json from typing import List, Dict, Optional from dataclasses import dataclass @dataclas
  • 利用Python定位Span标签中文字
    在开始之前,需要确保安装了必要的Python库。requests库用于发送HTTP请求,获取网页内容;BeautifulSoup库用于解析HTML文档,提取所需信息。 可
  • 使用python编写一个自动化部署工具

    使用python编写一个自动化部署工具
    效果 起因 现在springboot项目的自动化部署已经非常普遍,有用Jenkins的,有用git钩子函数的,有用docker的...等等。这段时间在玩python,想着用
  • Python中的下划线“_”们介绍
    随便拿一份Python代码,几乎都可以看到很多_的身影。 在Python中,下划线(_)有多种用途和含义,具体取决于它们的位置和使用方式。在这
  • OpenCV-Python给图像去除水印多种方法
    去除水印的过程与添加水印相反,它涉及到图像修复、颜色匹配和区域填充等技术。OpenCV-Python 提供了多种方法来处理不同类型的水印,包括
  • Python连接和操作Elasticsearch

    Python连接和操作Elasticsearch
    一、服务器端配置 在开始之前,确保你的 Elasticsearch 服务已经在服务器上正确安装和配置。 以下是一些基本的配置步骤: 1. 修改 Elasticse
  • Python ArcPy实现栅格图像文件由HDF格式批量转换为

    Python ArcPy实现栅格图像文件由HDF格式批量转换为
    首先,来看看我们想要实现的需求。 在一个名为HDF的文件夹下,有五个子文件夹;每一个子文件夹中,都存储了大量的.hdf格式的栅格遥感影
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计