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

简介: 给大家推荐一个一键自动化博客发布工具,完全的一键操作,让你轻松告别手动发布博客的烦恼。

好不容易写好了一篇博客,现在想要把它发布到各个平台上供大家一起欣赏?

然后一个网站一个网站打开要发布的博客站点,手动点创建文章,然后拷贝粘贴写的markdown文件。

甚至有些网站还不支持markdown格式,你还需要对格式进行转换。

每次重复这样的机械化工作,完全就是浪费生命。

现在不需要了,给大家推荐一个一键自动化博客发布工具,完全的一键操作,让你轻松告别手动发布博客的烦恼。

这个工具是什么

这个工具的全称叫做 blog-auto-publishing-tools博客自动发布工具,地址如下:https://github.com/ddean2009/blog-auto-publishing-tools

在数字化时代,内容创作与传播的速度与广度对于个人或企业品牌的建设至关重要。然而,许多博客作者和内容创作者在发布内容时,面临着跨平台发布的繁琐与不便。每个平台都有其独特的发布规则和操作流程,手动发布不仅耗时耗力,而且容易因为重复劳动而出现错误。为了解决这一痛点,我开发了这款博客自动发布工具。

我的原则就是能自动的,绝不手动。

这款博客自动发布工具,旨在帮助用户实现一键式多平台发布。

用户只需在工具中编写或导入博客内容,选择想要发布的平台(如CSDN、简书、掘金、知乎、头条、51blog、腾讯云、阿里云等),点击发布按钮,即可将内容快速推送到各个平台。

只需要编写好Markdown格式的博客即可,同时能够根据各平台的规则自动调整格式,确保内容在不同平台上的展示效果一致。

支持的博客平台

目前这个工具已经支持下面这些平台:

  • 支持简书
    • 支持cnblogs
    • 支持alicloud
    • 支持51cto
    • 支持infoq
    • 支持掘金
    • 支持oschina
    • 支持segmentfault
    • 支持头条
    • 支持txcloud
    • 支持知乎
      应该已经覆盖了绝大部分的平台了。如果还有其他的平台,大家可以留言给我。

工具的实现方式

这个工具本质上是基于selenium这个自动化框架实现的。

通过模拟人工的点击操作,可以完成绝大多数需要人手工才能完成的工作。解放大家的双手。

另外这个自动化的实现方式有两种,一种是在运行程序的过程中启动一个浏览器。另外一种是依附到现有的浏览器上来操作现有浏览器的页面。

本工具选择的是依附到现有的浏览器上。

主要是因为有些博客平台需要用手机扫码二维码才能登录。比如阿里云,腾讯云等。所以在程序中很难模拟这种登录的过程。

为什么不直接调用博客平台的发博客的接口来实现?而是选择页面自动化这种实现方式?
>

因为博客平台的发博客接口需要传入很多数据,直接调用的话,很多内容是没法考虑到的,比如:标签,分类,封面等等。所以我觉得自动化工具帮大家填好内容了,大家只需要看一眼,点击发布就行了,这样更加方便,如果要进行修改的话也更加灵活。

当然,如果大家真的有需要实现接口发送,可以私信给我,我可以研究研究怎么实现。

工具的缺点

当然,这个工具虽然有诸多优点,可以自动填充,发送博客。

但是实话实话,缺点还是有的。

总结一下:selenium有的缺点它都有。比如,封面图片上传目前没法自动化,需要手动操作,或者不使用封面图片。

怎么使用

  1. 目前这个工具是基于chrome的,所以你需要先下载一个chrome。
  2. 然后就是下载和chrome配套的chrome Driver Chrome Driver
  3. chrome 以debug模式启动
    chrome --remote-debugging-port=9222
    

在命令行你会看到类似下面的内容:

DevTools listening on ws://127.0.0.1:9222/devtools/browser/d4d05dd2-5b74-4380-b02d-12baa123445
这行ws很重要,我们把它记下来。

  1. 修改配置文件
    修改config/common.yaml 里面的内容:
# chrome driver地址
service_location: /Users/wayne/Downloads/work/chromedriver-mac-arm64/chromedriver
# chrome调试地址
debugger_address: localhost:9222/devtools/browser/4aab2b8b-112c-48a3-ba38-12baa123445

把service_location和debugger_address修改为你自己本机的配置。

enable:
  csdn: True
    jianshu: True
      juejin: True
        segmentfault: True
          oschina: True
            cnblogs: True
              zhihu: True
                cto51: True
                  infoq: True
                    toutiao: True
                      alicloud: True
                        txcloud: True
                    这些按照你自己的需求开启。

                    5. 运行程序

运行open_all.py 可以自动打开所有的博客网站。

运行publish_all.py 可以自动发布博客内容。

切记,在发布博客之前,一定要先保证你的账号是登录状态,否则无法发送博客。

简书的实现

接下来我们会从最简单的简书开始,讲解一下具体的实现细节。

配置文件

首先是配置文件,这里我用的是yaml格式的配置文件。

里面配置了service_location, debugger_address 这些非常重要的东西。

因为不同的博客平台可能有不同的配置。所以这里我们为每个博客平台设置了一个单独的配置文件。

启动浏览器

这里使用的是append模式,append到当前打开的浏览器上面。所以我们需要提前以debug模式开启一个chrome浏览器。

这里我们使用的chrome浏览器。

# 启动浏览器驱动服务
service = Service(common_config['service_location'])

# Chrome 的调试地址
debugger_address = common_config['debugger_address']

# 创建Chrome选项,重用现有的浏览器实例
options = Options()
options.page_load_strategy = 'normal'  # 设置页面加载策略为'normal' 默认值, 等待所有资源下载,
# options.page_load_strategy = 'eager' # 设置页面加载策略为'eager' 默认值, 不等待资源下载,
# options.page_load_strategy = 'none'  # 完全不会阻塞 WebDriver

options.add_experimental_option('debuggerAddress', debugger_address)

# 使用服务和选项初始化WebDriver
driver = webdriver.Chrome(service=service, options=options)

主要就是在启动chrome的时候,需要选择service和options。

发布博客

启动好浏览器,接下来就可以发布博客了。

首先我们打开简书的首页:

    # 打开新标签页并切换到新标签页
        driver.switch_to.new_window('tab')

            # 浏览器实例现在可以被重用,进行你的自动化操作
                driver.get(jianshu_config['site'])
                    time.sleep(2)  # 等待2秒
                `driver.switch_to.new_window` 确保我们是在新的tab页打开的简书首页。通过调用driver.get方法,我们可以打开简书的首页。

                接下来就是需要点击写文章按钮。

                要点击文章按钮,首先需要找到这个按钮。

                怎么找到它呢?

                熟悉selenium的朋友一定知道怎么用的,这里我给不熟悉的朋友介绍一下,在chrome浏览器中找到要定位的元素,右键选择检查,就可以找到了。

                ```python
                    # 写文章按钮
                        write_btn = driver.find_element(By.CLASS_NAME, 'write-btn')
                            write_btn.click()
                                time.sleep(2)  # 等待3秒
                                ```

                                 这里我们通过class name来查找发布文章的按钮。

                                ![image-20240429231837646](https://flydean-1301049335.cos.ap-guangzhou.myqcloud.com/img/202404292318041.png)



                                selenium中可以通过class,xpath,tag,id等类型进行元素的定位和查找。

                                id是最简的,因为id是全局唯一的,你只需要找到对应id即可。

                                tag和class往往会有很多个,不是很好定位。这个时候就需要用到xpath定位了。

                                xpath定位很强大,但是也比较复杂,接下来我们会在实际的案例中进行总结。



                                点击写文章,我们会跳转到新的写文章的界面,在简书中,左边是文集区,中间是文章区,右边是发布文章区:

                                ![image-20240429233421885](https://flydean-1301049335.cos.ap-guangzhou.myqcloud.com/img/202404292334175.png)



                                接下我们要做的就是点击左边的文集,然后点击中间的文章,最后在最右边发布文章。

                                在点击左边的文集之前,需要先切换到最新打开的tab页面:

                                ```python
                                    # 切换到新的tab
                                        driver.switch_to.window(driver.window_handles[-1])
                                            # 等待新标签页完成加载内容
                                                wait.until(EC.text_to_be_present_in_element((By.TAG_NAME, 'li'), '日记本'))
                                                ```

                                                然后我们做一个等待,等待日记本这几个字出现再进行下面的操作。

                                                接下来就是点击要选择的文集:

                                                ```python
                                                    # 找到要发表的文集
                                                        # 使用XPath表达式查找元素
                                                            article_collection = jianshu_config['article_collection']
                                                                li_element = driver.find_element(By.XPATH, f'//li[@title="{article_collection}"]')
                                                                    li_element.click()
                                                                        time.sleep(2)  # 等待3秒
                                                                        ```

                                                                        这里通过xpath来找到要发表的文集。

                                                                        > 这里的article_collection是写在配置文件里面的,需要修改为你自己的文集,否则程序会报错

                                                                        点击新建文章按钮:

                                                                        ```python
                                                                            # 点击新建文章按钮
                                                                                new_article_btn = driver.find_element(By.CLASS_NAME, 'fa-plus-circle')
                                                                                    new_article_btn.click()
                                                                                        time.sleep(2)  # 等待3秒
                                                                                        ```

                                                                                        找到文章内容,然后通过send_keys方法,把内容填写到content里面:

                                                                                        ```java
                                                                                            # 文章内容
                                                                                                content = driver.find_element(By.ID, 'arthur-editor')
                                                                                                    file_content = read_file_with_footer(common_config['content'])
                                                                                                        content.clear()
                                                                                                            content.send_keys(file_content)
                                                                                                                time.sleep(2)  # 等待3秒
                                                                                                                ```

                                                                                                                > 注意,这里我单独添加了一个footer内容,也就是自定义的文章尾部,方便大家做一些特殊的操作。

                                                                                                                最后是找到文章的标题框:

                                                                                                                ```python
                                                                                                                    # 文章标题
                                                                                                                        title = driver.find_element(locate_with(By.TAG_NAME, "input").above({By.ID: "arthur-editor"}))
                                                                                                                            title.clear()
                                                                                                                                title.send_keys(common_config['title'])
                                                                                                                                    time.sleep(2)  # 等待3秒
                                                                                                                                    ```

                                                                                                                                    > 简书的这个标题框不太好找,使用xpath很难定位,所以这里使用了一个小技巧:
                                                                                                                                    >
                                                                                                                                    > 先定位到它附近的arthur-editor,然后调用selenium的above命令,找到在他上面的input tag。

                                                                                                                                    ![image-20240429234936105](https://flydean-1301049335.cos.ap-guangzhou.myqcloud.com/img/202404292349799.png)

                                                                                                                                    这个定位非常巧妙,大家可以学习一下。

                                                                                                                                    然后就是发布按钮了:

                                                                                                                                    ```python
                                                                                                                                        # 发布按钮
                                                                                                                                            publish_button = driver.find_element(By.XPATH, '//a[@data-action="publicize"]')

                                                                                                                                                publish_button.click()
                                                                                                                                                ```

                                                                                                                                                是不是一切都做完了呢?

                                                                                                                                                并不是。

                                                                                                                                                如果你的markdown里面有图片的话,很可能出现异常,说是有图片未上传成功。

                                                                                                                                                那么我们需要定位到弹窗窗口的确定按钮,再点击发布按钮一次。

                                                                                                                                                ```python
                                                                                                                                                # 检查弹窗
                                                                                                                                                        alert = wait.until(EC.text_to_be_present_in_element((By.XPATH, '//div[@role="document"]'), '有图片未上传成功'))
                                                                                                                                                                if alert:
                                                                                                                                                                            ok_button = driver.find_element(locate_with(By.TAG_NAME, "button").near({By.XPATH: '//div[@role="document"]'}))
                                                                                                                                                                                        ok_button.click()
                                                                                                                                                                                                    time.sleep(2)
                                                                                                                                                                                                                print("Alert accepted")
                                                                                                                                                                                                                            # 重新发布一次
                                                                                                                                                                                                                                        publish_button.click()
                                                                                                                                                                                                                                                else:
                                                                                                                                                                                                                                                            print("No alert found")
                                                                                                                                                                                                                                                            ```

                                                                                                                                                                                                                                                            ## 总结

                                                                                                                                                                                                                                                            好了,自动发布到简书的任务就完成了。

                                                                                                                                                                                                                                                            总结一下,简书其实还是比较简单的,因为没有各种tag,也没有封面图片。就是博客内容对图片识别效果不太好。

                                                                                                                                                                                                                                                            [点我查看更多精彩内容:www.flydean.com](www.flydean.com)
相关文章
|
15天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
8天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
75 17
Selenium:强大的 Web 自动化测试工具
|
13天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
23天前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
26天前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
107 4
|
1月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
52 4
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
74 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
63 4
|
18天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####