一鍵自動化部落格釋出工具,用過的人都說好(oschina篇)

flydean發表於2024-05-07

oschina和segmentfault一樣,介面非常的清爽。

介面上除了必須的標題,內容之外,還有文章專輯和推廣專區這幾個選項。

一起來看看在blog-auto-publishing-tools中,是如何實現自動釋出到oschina的吧。

前提條件

前提條件當然是先下載 blog-auto-publishing-tools這個部落格自動釋出工具,地址如下:https://github.com/ddean2009/blog-auto-publishing-tools

oschina的實現

接下來我們手把手看看具體在oschina的自動化是如何實現的。

oschina的配置檔案

除了title和content之外,oschina還需要一個文章專輯和推廣專區:

image-20240506225816971

所以我們的配置檔案大概是這樣的:

site: https://my.oschina.net/flydean/blog/write
#專輯
collection: 程式那些事
#推廣專區:45  Llama中文社群
  #44  ChatGPT
  #43  非結構化資料
  #28  大前端
  #27  開發技能
  #10  資料庫
  #9  雲端計算
  #17  飛槳專區
  #16  OpenHarmony專區
  #19  開源治理
  #46  銀河麒麟專區
  #14  程式人生
  #26  軟體架構
  #15  行業趨勢
  #11  硬體 & IoT
  #8  AI & 大資料
  #39  昇思MindSpore
  #35  OpenVINO 中文社群
  #42  摸魚專區
  #41  OneOS
  #40  華為開發者聯盟
  #38  PostgreSQL
  #37  Linux基金會開源軟體大學
  #36  OSCTraining
  #34  EdgeX 中文社群
  #31  鯤鵬專區
  #30  openEuler
  #25  資訊保安
  #24  運維
  #23  軟體測試
  #22  網路技術
  #21  遊戲開發
  #20  多媒體處理
  #13  DevOps
  #6  區塊鏈
topic: 開發技能

其中collection是你自己建立的文章集合。

topic是oschina中自帶的topic,你只需要從中間選擇一個即可。

oschina的實現程式碼

所有的釋出器都在publisher目錄下,在下面你可以找到oschina_publisher這個專門給oschina的釋出器。

首先我們需要開啟新的tab,然後切換到oschina的部落格釋出頁面:

填充文章內容

先看下頁面上文章內容的資訊:

image-20240506230435279

可以看到oschina使用的也是CodeMirror這個開源的程式碼編輯工具。

這個工具不同於傳統的text或者textArea,他裡面的元素是隨著你的輸入動態變化的,所以這裡很難像傳統的頁面一樣直接使用send_keys來填充內容。

那麼我們怎麼向CodeMirror輸入內容呢?

既然send_keys不行,我們可以換一個思路,比如藉助系統自帶的複製和貼上功能。

首先定位到內容的輸入位置,然後把要輸入的內容貼上進去即可。

    # 文章內容
    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="CodeMirror-code"]//span[@role="presentation"]')
    content.click()
    # 模擬實際的貼上操作
    action_chains.key_down(cmd_ctrl).send_keys('v').key_up(cmd_ctrl).perform()
    time.sleep(3)  # 等待3秒

定位元素,我們是找到CodeMirror-code class下面的role=presentation的span即可。

這裡,我們使用的是xpath定位。

然後使用ActionChains來模擬系統的貼上操作。

填充文章的標題

標題部分比較簡單,他有一個name欄位:

image-20240506232051687

所以我們可以這樣來使用:

    # 文章標題
    title = driver.find_element(By.NAME, 'title')
    title.clear()
    title.send_keys(common_config['title'])
    time.sleep(2)  # 等待3秒

文章專輯

接下來,我們點選發布文章按鈕之後,就會顯示一個彈出框。

這裡我們需要填入文章專輯。

image-20240506225816971

文章專輯需要分兩步走。

第一步是點選下拉框:

category_select = driver.find_element(By.XPATH, '//div[contains(@class, "selection dropdown catalog-select")]')
category_select.click()

這裡透過xpath來定位下拉框。

第二步是從下拉框選擇對應的文章專輯:

select_element = category_select.find_element(By.XPATH, f'//div[contains(text(), "{collection}")]')
select_element.click()

同樣的,我們使用xpath的contains來獲取到text中包含有要選擇專輯名字的列表。

推廣專區

推廣專區和文章專輯很類似,都是一個下拉框。

同樣的,我們先點選下拉框:

topic_select = driver.find_element(By.XPATH, '//div[contains(@class, "selection dropdown groups")]')
topic_select.click()

然後選擇對應的推廣專區:

topic_item = topic_select.find_element(By.XPATH, f'//div[contains(text(), "{topic}")]')
topic_item.click()

釋出按鈕

最後一步,就可以點選發布按鈕釋出了:

confirm_button = driver.find_element(By.XPATH, '//div[contains(@class,"submit button effective-button")]')
confirm_button.click()

總結

這樣我們對於oschina的自動釋出就完成了。oschina相對而言比較簡單,甚至沒有封面上傳:-)

點我檢視更多精彩內容:www.flydean.com

相關文章