一键自动化博客发布工具,用过的人都说好(腾讯云篇)

news/2024/9/20 5:42:58/文章来源:https://www.cnblogs.com/flydean/p/18203828

虽然头条现在非常强大,但是我还是不得不吐槽一下头条的博客发布,居然不支持markdown格式。

并且在某些浏览器上还会出现编辑页面打不开的情况,让我一度怀疑是我浏览器的问题。

不过,这都不重要,重要的是blog-auto-publishing-tools这个工具可以实现头条的自动化。

前提条件

前提条件当然是先下载 blog-auto-publishing-tools这个博客自动发布工具,地址如下:https://github.com/ddean2009/blog-auto-publishing-tools

头条的实现

头条需要填写的内容也是挺多的。

我们接下来一个个来实现。

标题

虽然头条的标题是一个textarea,但是没有id或者name,所以我们只能通过placeholder来获得这个标题:

    # 文章标题title = driver.find_element(By.XPATH, '//div[@class="publish-editor-title-inner"]//textarea[contains(@placeholder,"请输入文章标题")]')title.clear()if 'title' in front_matter['title'] and front_matter['title']:title.send_keys(front_matter['title'])else:title.send_keys(common_config['title'])

正文

头条的正文用的也是ProseMirror,这是一个动态的文本编辑器,会随着你输入的内容动态更新html。所以不能用传统的textArea的方式来实现。

image-20240510113139564

在实现上我们可以使用拷贝粘贴的方式来实现。

现在还剩一个大问题,就是头条不支持markdown格式。

我们还需要考虑先把markdown格式转换成html,然后直接拷贝html到正文的内容里面。

网上有很多把markdown转换成html的工具,其中一个比较出名的就是pandoc。

pandoc的功能很强大,可以转换很多格式的文本。

对于markdown转换成html,可以使用下面的命令:

 pandoc -f markdown -t html5 input.md -o output.html

当然为了拷贝出来的样式好看一些,这里我还添加了css文件。

实现方法都写在了convert_md_to_html方法里面了。

感兴趣的朋友可以去看看。

最后我们的实现代码如下:

    # 文章内容 html版本content_file = common_config['content']content_file_html = convert_md_to_html(content_file)get_html_web_content(driver, content_file_html)time.sleep(2)  # 等待2秒driver.switch_to.window(driver.window_handles[-1])time.sleep(1)  # 等待1秒# 用tab定位,然后拷贝cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL# 模拟实际的粘贴操作(在某些情况下可能更合适):action_chains = webdriver.ActionChains(driver)# 定位到要粘贴的位置content_element = driver.find_element(By.XPATH, '//div[@class="publish-editor"]//div[@class="ProseMirror"]')content_element.click()time.sleep(1)action_chains.key_down(cmd_ctrl).send_keys('v').key_up(cmd_ctrl).perform()time.sleep(3)  # 等待3秒

解释下实现的逻辑。

convert_md_to_html是把markdown转换成了html。

get_html_web_content是在新的web tab中打开这个html文件,然后使用系统的复制功能把html内容拷贝到剪贴板上。

然后再定位到要粘贴的位置,使用系统的粘贴功能把内容粘贴到内容框中。

是不是很复杂?

标题设置

一般来说头条会自动为我们设置标题。所以这里就不选择了。

展示封面

目前还没看到头条的封面上传的input标签,所以这个功能展示还没实现。

大家就手动上传封面吧~~~

摘要

摘要是一个textarea,我们根据placeholder来定位到这个元素:

        summary_input = driver.find_element(By.XPATH, '//div[@class="multi-abstract-cell-content-input"]//textarea[contains(@placeholder,"好的摘要比标题更吸引读者")]')summary_input.send_keys(summary)

原创首发

当然,我们要设置成原创:

    original_button = driver.find_element(By.XPATH, '//div[@class="original-tag"]//span[contains(text(),"声明原创")]')original_button.click()time.sleep(2)

这里用xpath定位,判断text中是否包含声明原创这几个字。

最终发布

最后就是最终的发布按钮了,我们通过class中是否包含publish-btn-last来判断。

        publish_button = driver.find_element(By.XPATH, '//div[contains(@class,"publish-btn-last")]')publish_button.click()

总结

头条页面设计的基本上没啥规范,所以获取元素比较困难,大部分都是需要通过xpath来定位才行。

点我查看更多精彩内容:www.flydean.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/710018.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Atcoder 题目选做(四)

Atcoder 题目选做(四)(20/20)推荐阅读:#4、#9、#10、#18、#19\(\text{By DaiRuiChen007}\)1. [AGC059C] Guessing Permutation for as Long as Possible Problem Link给定 \(\dfrac{n\times (n-1)}2\) 个 \([1,n]\) 中的二元对的顺序,求有多少个 \(n\) 阶排列 \(P\) 使得…

Github打不开解决办法(最新有效)

Github打不开解决办法(最新有效) 1. 先看没解决之前的截图: 2. 解决方法(手动修改DNS): 2.1 以win11为例,第一步:打开 设置 - 网络和Internet,找到 高级网络设置 ,如下图所示:2.2 第二步:找到WLAN(有线连接的话选择本地连接),点击 查看其他属性,如下图所示…

C#在DataGridView表格中操作Access数据库

C#在DataGridView表格中 直接 添加 修改 删除数据 效果图 Form1.cs 完整代码using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.O…

ciscn2024初赛部分题目复现

ciscn2024初赛部分题目复现(更新ing)gdb_debug 64位ida反编译,将主要加密部分使用chatgpt写成更容易理解的python形式如下: def encrypt_string(s):v17 = []for i in range(len(s)):v17.append(ord(s[i]) ^ rand_1[i])ptr = list(range(len(s)))for k in range(len(s) - 1,…

C#连接Access数据库 查询和新增 示例

C#连接Access数据库 查询和新增 示例 项目中需要做一个写程序操作日志的需求,仅本机使用。这时Access数据库就是一个非常好的选择,简单,好用。 下面仅仅是一个示例,简单写出 查询 和 新增 等 C#操作 Access 数据库的 代码 效果图 clsDBHelperAccess.csusing System; using …

UE4 动态生成网格

说明 在游戏中动态改变网格数量和形状等,该功能是寻路功能的前期准备,即在基础移动地基上方,构建一层网格,任何移动的操作都可以基于该网格进行计算。从而在编辑器模式下能够更方便进行调试 InstancedStaticMeshComponent 其是一种用于优化静态网格渲染性能的技术。Instanc…

FormCreate中在事件中获取api

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持5个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定form-create中在事件中获取api FormCreate 是一个可以通过 JSON 生成具…

【最新】别再发邮件了,必须在开源之夏后台申请,50%的人竟然都没有报名成功!

引言 近期我们注意到很多学生朋友通过邮件向导师申请报名,请注意!!!​这是无效的,请必须通过“开源之夏”官方后台申请报名,请仔细参考这篇【报名攻略】 所以,我们特此举办这次宣讲会,目的是向所有感兴趣的学生详细介绍Apache DolphinScheduler社区在开源之夏中提供的项…

Flink富函数

富函数是DataStream API提供的函数接口,Flink的函数都有它的Rich版本,它与其他函数不同的是,富函数可以获取到运行环境上下文,初始化参数,拥有生命周期方法等,可通过它进行自定义复杂功能。我们常见的如RichMapFunction、RichFilterFunction等。富函数的生命周期主要通过…

C#如何用最简单方法调用Python?

最近有群友咨询C#如何调用Python?小编尝试Python.NET过程中遭遇的版本兼容性和环境配置难题,小编决定寻找一个更为简单、稳定且对初学者友好的解决方案。小编搜索一番,除了Python.NET之外,还有其他途径能够帮助我们轻松地在C#项目调用Python脚本,那就是通过命令行调用,使…

创建你的-Mysql-数据库-全-

创建你的 Mysql 数据库(全)原文:zh.annas-archive.org/md5/853FEC9D976A75004408D5A9A661EDD8 译者:飞龙 协议:CC BY-NC-SA 4.0前言 1995 年发布的 MySQL 已成为最受欢迎的开源数据库系统。MySQL 和 phpMyAdmin 的普及使得许多非 IT 专家能够使用 MySQL 后端构建动态网站。…

【Unreal】虚幻GAS系统快速入门

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!前言最近在用UE做单机ARPG的战斗系统,研究了一下GAS。本文主要介绍GAS各个模块的用途,以及特定功能的多种实现方法。为了让大部分人能…