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還需要一個文章專輯和推廣專區:
所以我們的配置檔案大概是這樣的:
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的部落格釋出頁面:
填充文章內容
先看下頁面上文章內容的資訊:
可以看到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欄位:
所以我們可以這樣來使用:
# 文章標題
title = driver.find_element(By.NAME, 'title')
title.clear()
title.send_keys(common_config['title'])
time.sleep(2) # 等待3秒
文章專輯
接下來,我們點選發布文章按鈕之後,就會顯示一個彈出框。
這裡我們需要填入文章專輯。
文章專輯需要分兩步走。
第一步是點選下拉框:
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