一鍵自動化博客發佈工具,用過的人都說好(簡書篇)

好不容易寫好了一篇博客,現在想要把它發佈到各個平臺上供大家一起欣賞?

然後一個網站一個網站打開要發佈的博客站點,手動點創建文章,然後拷貝粘貼寫的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

這些按照你自己的需求開啓。

  1. 運行程序

運行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瀏覽器中找到要定位的元素,右鍵選擇檢查,就可以找到了。

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

這裏我們通過class name來查找發佈文章的按鈕。

image-20240429231837646

selenium中可以通過class,xpath,tag,id等類型進行元素的定位和查找。

id是最簡的,因爲id是全局唯一的,你只需要找到對應id即可。

tag和class往往會有很多個,不是很好定位。這個時候就需要用到xpath定位了。

xpath定位很強大,但是也比較複雜,接下來我們會在實際的案例中進行總結。

點擊寫文章,我們會跳轉到新的寫文章的界面,在簡書中,左邊是文集區,中間是文章區,右邊是發佈文章區:

image-20240429233421885

接下我們要做的就是點擊左邊的文集,然後點擊中間的文章,最後在最右邊發佈文章。

在點擊左邊的文集之前,需要先切換到最新打開的tab頁面:

    # 切換到新的tab
    driver.switch_to.window(driver.window_handles[-1])
    # 等待新標籤頁完成加載內容
    wait.until(EC.text_to_be_present_in_element((By.TAG_NAME, 'li'), '日記本'))

然後我們做一個等待,等待日記本這幾個字出現再進行下面的操作。

接下來就是點擊要選擇的文集:

    # 找到要發表的文集
    # 使用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是寫在配置文件裏面的,需要修改爲你自己的文集,否則程序會報錯

點擊新建文章按鈕:

    # 點擊新建文章按鈕
    new_article_btn = driver.find_element(By.CLASS_NAME, 'fa-plus-circle')
    new_article_btn.click()
    time.sleep(2)  # 等待3秒

找到文章內容,然後通過send_keys方法,把內容填寫到content裏面:

    # 文章內容
    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內容,也就是自定義的文章尾部,方便大家做一些特殊的操作。

最後是找到文章的標題框:

    # 文章標題
    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

這個定位非常巧妙,大家可以學習一下。

然後就是發佈按鈕了:

    # 發佈按鈕
    publish_button = driver.find_element(By.XPATH, '//a[@data-action="publicize"]')

    publish_button.click()

是不是一切都做完了呢?

並不是。

如果你的markdown裏面有圖片的話,很可能出現異常,說是有圖片未上傳成功。

那麼我們需要定位到彈窗窗口的確定按鈕,再點擊發布按鈕一次。

# 檢查彈窗
        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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章