【微信公众号】公众号文章批量导出PDF文件

最新文档内容:https://www.cnblogs.com/MrFlySand/p/17216072.html

导出的PDF文件名如下图构成文章发表日期+文章名称,这些都是程序自动获取的。

pdf效果图

效果图



温馨提示本篇文章较长,细节处较多,逻辑结构较为复杂。第一次操作前建议先阅读完整篇文章并理解,再从头开始跟着教程一步步操作。

操作步骤

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

1、登录微信公众号后台,点击“内容管理”-“发表记录”。
image

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

3、当我们按下Ctrl+S后电脑会出现如下窗口,记住html文件保存路径(如下图红色方框1就是文件路径),并设置html文件名称(如下图方框2)。

注意事项:html文件的序号是1~nhtml文件名称格式数字+公众号.html,例如:1公众号.html2.公众号.html3.公众号.html依次类推,注意序号一定是从1~n,文件命名时,文件名称前面的编号一定不能中断。

image

代码实现的原理(你也要阅读):html文件中保存着发布推文的文章链接,程序会提取这些链接,并通过这些链接打开每篇文章。因此你如果需要导出2023年7~8月发表过的推文就点击“发表记录”中的序号4(需要导出哪些推文就保存这个html网页),然后Ctrl+S保存。
image

显示文件后缀名

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

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

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

步骤二:运行程序

双击运行exe程序:在文件夹下双击运行微信公众号文章批量下载成pdf.exe程序,程序就会开始运行,如果中间有卡顿这是正常的,这时一定不要操作电脑;如果1分钟都没有反应表示本程序不兼容你的电脑,你就需要使用U盘换一台电脑重新开始运行程序。

注意事项(一定要看!!!)html文件和exe文件在同一文件夹下,如下图:

exe程序说明:此程序会模拟人类的操作行为,它会自动解析html文件里面所有发表过的文章,程序会自动打开这些文章并导出pdf文件。此程序只是模拟人类的行为导出PDF,因此你可以晚上(你不用电脑的时候)长时间运行几个小时此程序,它并不能一下子导出PDF。
获取exe程序:关注微信公众号【小知识酷】后台回复“公众号文章批量导出pdf文件”获取exe文件
【文章推荐】网页手动导出pdf教程

效果图

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




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

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

1、手机下载“订阅号助手”。

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

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

4、如果有遗漏,可以先看看微信公众号文章里面从日期1日~10日的内容是否连续,如果中断了,就看文件夹里面的文件编号是否中断,如果中断就需要查找出哪一个日期pdf文件没有进行导出成功。

exe文件无法正常运行

前言:当我们没有exe文件或exe无法正常运行时,我们就只能手动导出pdf了,操作步骤如下:

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

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

3、记住html文件保存路径(如下图最上面红色方框),并设置【html文件名称】。
注意:html文件由序号1~n,html文件名称格式数字+公众号.html,如1公众号.html,注意文件名称不要搞混了。

4、将html文件及其对应的html文件夹分发给其他的同学,让其他同学打开html网页文件,点击发布的推文,会打开这篇推文。最后手动导出pdf文件。
image

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

【文章推荐】网页手动导出pdf教程https://mp.weixin.qq.com/s/TEZZUmk_Qu9IKFpRTutlZQ (如果有同学不会网页导出pdf,让他看网页导出pdf教程)

python代码如下

'''
名称:公众号文章导出pdf
功能:微信公众号文章程序自动化导出pdf文件
程序操作手册:https://www.cnblogs.com/MrFlySand/p/17216072.html
发表时间: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("更新时间:2024年11月5日20:09:03\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-飞沙,QQ:2444099018
名称:微信公众号文章批量导出pdf文件
功能:微信公众号文章程序自动化导出pdf文件
程序操作手册:https://www.cnblogs.com/MrFlySand/p/17216072.html
发表时间:2023年08月12日 21:35
更新时间:2024年11月5日20:05:10
posted @ 2023-08-12 21:35  MrFlySand-飞沙  阅读(521)  评论(0编辑  收藏  举报