首页 > 其他分享 >微信公众号文章批量转pdf

微信公众号文章批量转pdf

时间:2023-12-12 14:02:36浏览次数:30  
标签:pyautogui 文件 批量 微信 公众 html pdf import


微信公众号文章批量转pdf_文件名

操作步骤

步骤一:下载离线html网页文件

1、登录微信公众号后台,打开“发表记录”。

微信公众号文章批量转pdf_文件名_02

2、 按Ctrl+S或右击网页选择“另存为”,保存离线的html网页文件。(网页的文件后缀名是html)

微信公众号文章批量转pdf_公众号_03

3、记住html文件保存路径(如下图最上面红色方框),并设置【html文件名称】。

注意:html文件由序号1~n,html文件名称格式数字+公众号.html,如1公众号.html,注意文件名称不要搞混了。

微信公众号文章批量转pdf_文件名_04

显示文件后缀名

如果你的电脑没有显示html可以进行以下操作:win11操作如下图,其他系统可以百度“显示文件后缀名”查看教程。

微信公众号文章批量转pdf_文件名_05

4、点击第2页的文章发表记录,重复步骤2、步骤3的操作。

微信公众号文章批量转pdf_公众号_06

5、效果图:下载好所有html文件。html文件由序号1~n,html文件名称格式数字+公众号.html

微信公众号文章批量转pdf_html_07

步骤二:运行程序

运行程序:在当前文件夹下双击运行程序微信公众号文章批量下载成pdf.exe

注意html文件和exe文件在同一文件夹下

exe程序:程序会自动解析html文件里面的所有发表文章,模拟我们打开这些文章并导出pdf文件。
戳下方链接后台回复“230829公众号文章pdf”获取exe文件
【文章推荐】网页导出pdf教程

微信公众号文章批量转pdf_公众号_08

当我们在运行exe文件时会出现下方需要输入的内容。
其中输入3-3表示只生成3公众号.html里面的作品表;
输入1-2表示只生成1公众号.html2公众号.html里面的作品表;
输入2-4表示只生成2公众号.html3公众号.html4公众号.html里面的作品表。

微信公众号文章批量转pdf_html_09

检查pdf文件数量,判断是否有遗漏

1、手机下载“订阅号助手”(绿色图标)。

2、点击【我】——【数据统计】——【单篇发表】——【自定义】——设置日期为“1号-30号/31号”——查看当月发表的总文章数量

微信公众号文章批量转pdf_html_10

3、将1月份的pdf放在一个文件夹中,在文件夹左下角查看PDF文件的个数,查看是否有遗漏。

微信公众号文章批量转pdf_文件名_11

exe文件无法正常运行

当我们没有exe文件时,我们就只能手动导出pdf了。

注意:微信公众号文章导出pdf时要注意,当我们打开网页后要将网页的滚动条慢慢往下拖动,等待图片加载完成才可以按Ctrl+P,这样pdf中的图片才会显示完整。 倘若直接一下子拖动下来,网页里面的图片没有加载出来,导出的pdf文件里面就不会有图片。

'''
名称:公众号文章导出pdf
功能:微信公众号文章程序自动化导出pdf文件
程序操作手册:
发表时间:2023-08-12 21:35
更新时间:2023年8月28日17:11:08
'''

from asyncio.windows_events import NULL
from doctest import Example
import importlib
from pathlib import Path
from lxml import etree
import re
from urllib import request, response
import requests 
from urllib import request
import re #进行数据清洗要导入此模块
from asyncio import sleep
from datetime import date,datetime
import time
import pdfkit
import os, sys
import datetime
import pdfkit
import time
import webbrowser
import webbrowser as web
from pynput import mouse
import pyautogui
import driver
from selenium import webdriver
import pyperclip

cur_file_dir = os.path.abspath(__file__).rsplit("\\", 1)[0]

# 获取所有的推文链接
def GetSiteList(start, end,path):
  siteLists = []
  print("\n程序正在运行...")
  for i in range(start, end):
    parser = etree.HTMLParser(encoding='utf-8')
    try:
      tree = etree.parse(path+str(i)+"公众号.html", parser=parser)
      html = etree.tostring(tree,encoding="utf-8").decode()
      result = tree.xpath("//*[@class='weui-desktop-mass-appmsg__title']/@href")
      siteLists.extend(result)
    except Exception as result:
      print("\n错误提示:你保存的html文件名称错误,正确文件名称为:1公众号.html、2公众号.html、3公众号.html,请重新命名文件后运行程序。\n")
      pass 
  return siteLists

# 导出pdf文件
def PrintPdf(url):
  # webdriver.Edge()打开edge浏览器
  # webdriver.Chrome()打开chrome浏览器
  driver = webdriver.Edge() 
  driver.maximize_window() 
  driver.get(url) # 打开网页链接
  time.sleep(2) # 等待网页正常打开
  reponse = request.urlopen(url).read().decode() # 获取网页中的数据
  
  # 获取文章发表日期
  try:
    pat1 = r"var ct = \"(\d+)\""        
    date1 = re.search(pat1, reponse).group(1)
    date1 = int(date1)
    #转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
    timeArray = time.localtime(date1)
    otherStyleTime = time.strftime("%m月%d日", timeArray)
  except Exception as result:
    try:
      pat2 = r"window.ct = \'(\d+)\'"
      date2 = re.search(pat2, reponse).group(1)
      date2 = int(date2)
      timeArray = time.localtime(date2)
      otherStyleTime = time.strftime("%m月%d日", timeArray)
    except Exception as result:
      pass
  
  # 获取文章标题
  try:
    html = etree.HTML(reponse)        
    activity_name = html.xpath("//h1")[0].text.strip()
    # 文件名称中不能包含\ / : * ? " < > | 这9个特殊字符,因此将他们替换为空
    pat = re.compile(r"[*?:\"<>/|\\]")
    activity_name = pat.sub(" ",activity_name)
  except Exception as result:
    pass

  # 将网页往文章底部拉动  
  temp_height=0
  while True:
    # 循环将滚动条下拉300px
    driver.execute_script("window.scrollBy(0,300)")
    time.sleep(1) #等待1秒加载网页中的图片
    
    #获取当前滚动条距离顶部的距离
    check_height = driver.execute_script("return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")
    # 如果两者相等说明文章到达底部了
    if check_height==temp_height:
      break
    temp_height=check_height
  
  time.sleep(1)
  pyautogui.keyDown('ctrl')    # 按下shift
  pyautogui.press('p')    # 按下 4
  pyautogui.keyUp('ctrl')   # 释放 shift

  time.sleep(10) #等待pdf文件加载完成
  pyautogui.keyDown('enter') # 回车
  pyautogui.keyUp('enter')
  time.sleep(2) # 等待导出pdf文件窗口
  # print(otherStyleTime,",",activity_name)
  
  # “该内容已被发布者删除”的网页没有标题和发表日期,所以直接return
  try:
    pyperclip.copy(otherStyleTime) # 将文章发表日期复制到系统剪贴板
  except Exception as result:
    return 0
    
  # ctrl+v粘贴日期  
  pyautogui.keyDown('ctrl')    
  pyautogui.press('v')   
  pyautogui.keyUp('ctrl')
  pyautogui.press('-')

  # “该内容已被发布者删除”的网页没有标题和发表日期,所以直接return
  try:
    pyperclip.copy(activity_name) # 将文章标题复制到系统剪贴板
  except Exception as result:
    return 0
  
  # ctrl+v粘贴 文章标题
  pyautogui.keyDown('ctrl')    
  pyautogui.press('v')   
  pyautogui.keyUp('ctrl')
  time.sleep(2)

  # 确定保存pdf文件
  pyautogui.keyDown('enter')
  pyautogui.keyUp('enter')
  time.sleep(3)

if __name__ == '__main__':
  # 获取当前文件的路径
  if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
  elif __file__:
    application_path = os.path.dirname(__file__)
  path = application_path.replace("\\","/")+"/"
  print("程序来源于公众号【小知识酷】,回复“公众号文章转pdf”获取本程序相关教程和最新执行程序exe文件")
  print("更新时间:2023年8月14日\nVersion:Beta1.3")
  print("\n\n注意正确的网页文件名称为:1公众号.html、2公众号.html、3公众号.html\n")

  minNum = input("请输入html文件起始文件标号:")    
  maxNum = input("请输入html文件结束文件标号:")

  # 获取当前文件夹下的所有html文件中文章的url
  getSiteList = GetSiteList(int(minNum),int(maxNum)+1, path)

  # 将html网页导出pdf文件
  for i in range(0,len(getSiteList)):
    print("正在获取第",i+1,"个html网页中的链接...")
    PrintPdf(getSiteList[i])

  input("\n程序运行完毕")

作者:MrFlySand-飞沙

名称:公众号文章导出pdf

功能:微信公众号文章程序自动化导出pdf文件

程序操作手册:

发表时间:2023-08-12 21:35

更新时间:2023年8月28日17:11:08



标签:pyautogui,文件,批量,微信,公众,html,pdf,import
From: https://blog.51cto.com/MrFlySand/8786801

相关文章

  • pdf.js打开后的pdf文件
    原文链接:https://www.cnblogs.com/the-big-dipper/p/16880180.html 1、html项目方法:<ahref="../../pdf/web/viewer.html?file=../../pdf/1.pdf"target="_blank">文件</a>最重要的是href的地址。href地址的组成:pdfjs的viewer.html地址 + ?file=+ pdf文件地址pdfjs......
  • Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)
    首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习。我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的。这个过程有点像我们之前使用Java对接第三方接口的方式,所以今天我想开发一个很实用的工具类,用......
  • Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)
    首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习。我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的。这个过程有点像我们之前使用Java对接第三方接口的方式,所以今天我想开发一个很实用的工具类,用......
  • 每月免费调用1000次API调用:实现PDF转档、页面编辑、OCR
    每月1000次免费PDFAPI调用:使用ComPDFKitAPI充分发挥您PDF转换的全部潜力 您是否在寻找无需前期投资即可提升软件集成能力的途径?再也不用找了!我们先进的API为您的项目提供所需的强大功能和易用性。注册并开始免费调用API。 我们提供每月1000次的免费API调用!通过这每月10......
  • 微信小程序自定义顶部导航栏并适配不同机型
    前言在小程序中,顶部导航栏是一个非常重要的组件,它不仅可以方便用户进行页面切换,还可以提高用户体验。默认情况下,小程序的顶部导航栏是由系统自动生成的,我们只能修改一些基本的样式,如背景色、文字颜色等。但是,如果想要实现更加复杂的样式,如自定义图标、自定义背景等,而且在不同的手......
  • 机器学习-线性回归-小批量-梯度下降法-04
    1.随机梯度下降法梯度计算的时候随机抽取一条importnumpyasnpX=2*np.random.rand(100,1)y=4+3*X+np.random.randn(100,1)X_b=np.c_[np.ones((100,1)),X]n_epochs=10000learn_rate=0.001m=100theta=np.random.randn(2,1)forepoch......
  • uview1 的u-tabs组件在微信小程序中会出现横向滚动条
    uview1的u-tabs组件在微信小程序中会出现横向滚动条,真机才会生效,微信开发者工具没问题包括官方示例也会原因:未屏蔽微信小程序的滚动条解决办法:uview-ui中uview-ui/components/u-tabs/u-tabs.vue文件把h5屏蔽滚动条的条件编译加上 ||MP-WEIXIN/*#ifdefH5||MP-WEIXIN*/......
  • 个人微信号机器人开发
    简要描述:获取收藏详细信息请求URL:http://域名地址/weChatFavorites/getFavItem请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是String微信实列IDfavId是int收藏标识返回数据:......
  • 安防监控系统/盘阵列/视频监控EasyCVR平台微信推送步骤大公开
    视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度高、部署轻快,在智慧工地、智慧园区、智慧......
  • macOS 苹果电脑双面打印单面打印PDF设置
    苹果的打印服务分为两个部分,一个是应用层另一个是系统层。其中双面打印或单面打印统一在系统层面设置,下面我分别截图示意wpspdf和福昕pdf两款软件设置双面打印。1.WPSPDF在完成方式【点击感叹号】中选择单面打印即可。2.福昕PDF打印然后进入系统设置属性选择打印机选项......