久趣下载站

当前位置: 首页 » 游戏攻略 » 自动化CSDN博客发布工具及实现思路

自动化CSDN博客发布工具及实现思路

CSDN是大家熟悉的博客平台之一,具有较高的知名度。因此,开发一款能够自动发布到CSDN的工具是非常有必要的。

本篇将分享自动化CSDN博客发布的思路及解决问题的方法。

解决问题的思路至关重要,因为知识是静态的,而问题是动态的。我们需要不断解决工作中遇到的问题。

前提条件

首先需要下载blog-auto-publishing-tools这个自动发布工具,地址:https://github.com/ddean2009/blog-auto-publishing-tools

CSDN的实现

进入CSDN的文章编辑页面很简单,只需在登录状态下访问https://editor.csdn.net/md/。

具体的实现代码可以在publisher/csdn_publisher.py中找到。

标题

CSDN的文章标题部分没有ID和name,只有一个独立的输入框。

定位这个输入框的一个常用方法是使用xpath和placeholder。

    # 文章标题
    title = driver.find_element(By.XPATH, '//div[contains(@class,"article-bar")]//input[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'])
    time.sleep(2)  # 等待3秒

文章内容

CSDN的文章内容部分是动态变动的,不是固定的

然而拷贝和粘贴方法可依然适用。在拷贝内容之前,需要先定位到拷贝地址。

下面的代码使用了xpath来定位到编辑器类下的cledit-section。

定位后,点击按钮并直接粘贴内容即可。

    # 文章内容 markdown版本
    file_content = read_file_with_footer(common_config['content'])
    # 用的是CodeMirror,不能用元素赋值的方法,所以我们使用拷贝的方法
    cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL
    # 将要粘贴的文本内容复制到剪贴板
    pyperclip.copy(file_content)
    action_chains = webdriver.ActionChains(driver)
    content = driver.find_element(By.XPATH, '//div[@class="editor"]//div[@class="cledit-section"]')
    content.click()
    time.sleep(2)
    # 模拟实际的粘贴操作
    action_chains.key_down(cmd_ctrl).send_keys('v').key_up(cmd_ctrl).perform()
    time.sleep(3)  # 等待3秒

发布文章按钮

内容输入完成后,可以点击右边的”发布文章”按钮。由于CSDN的按钮没有ID,我们需要使用xpath来定位到这个按钮。

    # 发布文章
    send_button = driver.find_element(By.XPATH, '//button[contains(@class, "btn-publish") and contains(text(),"发布文章")]')
    send_button.click()
    time.sleep(2)

点击发布文章后,会弹出一个弹窗框。弹出框中需要填写一些额外信息,如文章标签,封面,摘要,分类专栏,文章类型和可见范围等内容。

文章标签

添加文章标签的路径较复杂。首先点击“添加文章标签”按钮,然后弹出对话框,需要在对话框中进行文字搜索、输入tag、回车操作,并最后点击右上角的x按钮关闭对话框。

    # 文章标签
    if 'tags' in front_matter and front_matter['tags']:
        tags = front_matter['tags']
    else:
        tags = csdn_config['tags']
    if tags:
        add_tag = driver.find_element(By.XPATH,
                                        '//div[@class="mark_selection"]//button[@class="tag__btn-tag" and contains(text(),"添加文章标签")]')
        add_tag.click()
        time.sleep(1)
        tag_input = driver.find_element(By.XPATH, '//div[@class="mark_selection_box"]//input[contains(@placeholder,"请输入文字搜索")]')
        for tag in tags:
            tag_input.send_keys(tag)
            time.sleep(2)
            tag_input.send_keys(Keys.ENTER)
            time.sleep(1)

        # 关闭按钮
        close_button = driver.find_element(By.XPATH, '//div[@class="mark_selection_box"]//button[@title="关闭"]')
        close_button.click()
        time.sleep(1)

…(接下文类似处理)
猜你喜欢
本类排行