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

flydean發表於2024-05-21

雖然頭條現在非常強大,但是我還是不得不吐槽一下頭條的部落格釋出,居然不支援markdown格式。

並且在某些瀏覽器上還會出現編輯頁面打不開的情況,讓我一度懷疑是我瀏覽器的問題。

不過,這都不重要,重要的是blog-auto-publishing-tools這個工具可以實現頭條的自動化。

前提條件

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

頭條的實現

頭條需要填寫的內容也是挺多的。

我們接下來一個個來實現。

標題

雖然頭條的標題是一個textarea,但是沒有id或者name,所以我們只能透過placeholder來獲得這個標題:

    # 文章標題
    title = driver.find_element(By.XPATH, '//div[@class="publish-editor-title-inner"]//textarea[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'])

正文

頭條的正文用的也是ProseMirror,這是一個動態的文字編輯器,會隨著你輸入的內容動態更新html。所以不能用傳統的textArea的方式來實現。

image-20240510113139564

在實現上我們可以使用複製貼上的方式來實現。

現在還剩一個大問題,就是頭條不支援markdown格式。

我們還需要考慮先把markdown格式轉換成html,然後直接複製html到正文的內容裡面。

網上有很多把markdown轉換成html的工具,其中一個比較出名的就是pandoc。

pandoc的功能很強大,可以轉換很多格式的文字。

對於markdown轉換成html,可以使用下面的命令:

 pandoc -f markdown -t html5 input.md -o output.html

當然為了複製出來的樣式好看一些,這裡我還新增了css檔案。

實現方法都寫在了convert_md_to_html方法裡面了。

感興趣的朋友可以去看看。

最後我們的實現程式碼如下:

    # 文章內容 html版本
    content_file = common_config['content']
    content_file_html = convert_md_to_html(content_file)
    get_html_web_content(driver, content_file_html)
    time.sleep(2)  # 等待2秒
    driver.switch_to.window(driver.window_handles[-1])
    time.sleep(1)  # 等待1秒
    # 用tab定位,然後複製
    cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL
    # 模擬實際的貼上操作(在某些情況下可能更合適):
    action_chains = webdriver.ActionChains(driver)
    # 定位到要貼上的位置
    content_element = driver.find_element(By.XPATH, '//div[@class="publish-editor"]//div[@class="ProseMirror"]')
    content_element.click()
    time.sleep(1)
    action_chains.key_down(cmd_ctrl).send_keys('v').key_up(cmd_ctrl).perform()
    time.sleep(3)  # 等待3秒

解釋下實現的邏輯。

convert_md_to_html是把markdown轉換成了html。

get_html_web_content是在新的web tab中開啟這個html檔案,然後使用系統的複製功能把html內容複製到剪貼簿上。

然後再定位到要貼上的位置,使用系統的貼上功能把內容貼上到內容框中。

是不是很複雜?

標題設定

一般來說頭條會自動為我們設定標題。所以這裡就不選擇了。

展示封面

目前還沒看到頭條的封面上傳的input標籤,所以這個功能展示還沒實現。

大家就手動上傳封面吧~~~

摘要

摘要是一個textarea,我們根據placeholder來定位到這個元素:

        summary_input = driver.find_element(By.XPATH, '//div[@class="multi-abstract-cell-content-input"]//textarea[contains(@placeholder,"好的摘要比標題更吸引讀者")]')
        summary_input.send_keys(summary)

原創首發

當然,我們要設定成原創:

    original_button = driver.find_element(By.XPATH, '//div[@class="original-tag"]//span[contains(text(),"宣告原創")]')
    original_button.click()
    time.sleep(2)

這裡用xpath定位,判斷text中是否包含宣告原創這幾個字。

最終釋出

最後就是最終的釋出按鈕了,我們透過class中是否包含publish-btn-last來判斷。

        publish_button = driver.find_element(By.XPATH, '//div[contains(@class,"publish-btn-last")]')
        publish_button.click()

總結

頭條頁面設計的基本上沒啥規範,所以獲取元素比較困難,大部分都是需要透過xpath來定位才行。

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

相關文章