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

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

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