提取多个html生成单个html

简介: 提取多个html生成单个html
#!/bin/bash
# coding=utf-8
"""
    作者:gaojs
    功能:
    新增功能:
            schedule 是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间。
            schedule 允许用户使用简单、人性化的语法以预定的时间间隔定期运行 Python 函数(或其它可调用函数)
        demo如下:
            schedule.every(10).seconds.do(job)
            schedule.every(10).minutes.do(job)
            schedule.every().hour.do(job)
            schedule.every().day.at("10:30").do(job)
            schedule.every(5).to(10).minutes.do(job)
            schedule.every().monday.do(job)
            schedule.every().wednesday.at("13:15").do(job)
            schedule.every().minute.at(":17").do(job)
    日期:2022/5/29 12:45
    blog: www.gaojs.com.cn
"""
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from smtplib import SMTP_SSL
from email.header import Header
import schedule
from selenium import webdriver
from email.mime.text import MIMEText
from selenium.webdriver.firefox.options import Options
import re
import time
import os
def get_report_source_code():
    """
    获取test报告源码页面
    """
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    driver = webdriver.Firefox(options=chrome_options)
    release_name = ['APV', 'netIAG', 'FT', 'UAG', 'AG9.4']
    source = ''
    for release in release_name:
        time.sleep(5)
        url = f'http://192.168.120.204/builds/{release}/'
        driver.get(url)
        driver.maximize_window()
        source_code = driver.page_source
        # 删除替换网页源码部分标签
        result = re.sub('<td valign="top">(.*?)</td>', ' ', source_code)
        result = re.sub('<tr> <td><a href="/builds/">Parent(.*?)</td></tr>', ' ', result)
        result = re.sub('<address>(.*?)</address>', ' ', result)
        result = re.sub('<h1>(.*?)</h1>', f'<h1>{release} Latest Builds</h1>', result)
        result1 = re.sub('<tr><th valign="top">(.*?)</tr>', ' ', result)
        r = re.findall('<tr> <td><a href=".*?">(.*?)</a></td>', result1)
        if r:
            s1 = result1
            for i in r:
                t = f'http://192.168.120.204/builds/{release}/' + i
                s0 = re.sub(f'<tr> <td><a href=".*?">{i}</a></td>', f'<tr> <td><a href=".*?">{t}</a></td>', s1)
                s1 = s0
            source = source + s1
    driver.close()
    return source
def send_email():
    """
    发送test_report邮件
    """
    # 获取页面源码
    source_code = get_report_source_code()
    # 以126邮箱为例
    # ----------------发件相关参数----------------
    smtpserver = 'smtp.126.com'
    port = 0
    sender = 'testops_jianshuai@126.com'
    password = 'HHHAXZQYIAPTAQST'
    receicer = ['gaojs@arraynetworks.com.cn', '1315202xxxx@163.com']
    # ----------------编辑邮件内容----------------
    subject = '204 server 最新builds 一览表'
    body = f'<p>{source_code}<p>'
    msg = MIMEMultipart()
    msg['Subject'] = Header(subject, 'utf-8')  # 邮件主题
    msg['From'] = sender  # 发件人
    msg['To'] = ';'.join(receicer)
    msg.attach(MIMEText(body, 'html', 'utf-8'))
    attchment = MIMEApplication(open(r'./report.html', 'rb').read())
    attchment.add_header('Content-Disposition', 'attachment', filename="report.html")
    msg.attach(attchment)  # 添加附件到邮件
    smtp = SMTP_SSL(smtpserver)
    smtp.login('testops_jianshuai@126.com', password)
    smtp.sendmail(sender, receicer, msg.as_string())
    smtp.quit()
    print('******************* 邮件发送完成,请查收附件! ************************')
def download():
    """
    自动下载release
    """
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    driver = webdriver.Firefox(options=chrome_options)
    print('*************************** 正在刷新新版本,请稍等 *******************************')
    url = 'http://10.3.0.20/sp2/build/rel_ag_9_4.html'
    time.sleep(5)
    driver.get(url)
    driver.maximize_window()
    print('downloading')
    start_time = time.time()
    try:
        element = driver.find_element_by_xpath(xpath='/html/body/blockquote[1]/a[1]').text
        release_url = element.split(' ')[0]
        print(release_url)
        # 分离url和文件名称
        release_name = os.path.split(release_url)[1]
        print(release_name)
    finally:
        os.chdir('/var/www/html/builds/AG9.4/')
        if not os.path.exists('/var/www/html/builds/AG9.4/' + release_name):
            os.system(r'curl -o %s  %s' % (release_name, release_url))
    end_time = time.time()
    driver.close()
    print(f'*************************** 总共用时 {end_time - start_time} s **************************')
if __name__ == '__main__':
    send_email()
相关文章
|
8天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
3597 15
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
16天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3592 13
|
10天前
|
人工智能 自然语言处理 供应链
|
12天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2968 7
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
18天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3713 25
|
10天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
1452 3
|
3天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
473 0
|
16天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)