当前位置:首页> 原创动态 >使用Python自动化发布文章(二)

使用Python自动化发布文章(二)

2023-05-10 14:56:27

本文是在上一篇文章 使用Python自动化发布文章:(一) 基础上加以改进而来的. 可以完成自动化发布文章。


操作演示:


我先说说文章怎么发布.

  1. 首先准备一个你要发布的文章. 文章第一行是要发布文章的标题,第二行是要发布文章的类型.第二行以后都是文章的正文部分,最好是用Markdown,因为开源中国默认是markdown。


  2. 在下面代码的 read_file 方法中修改文件名.这里注意调整一下.

  3. 运行代码就可以了

    文章发布后效果图如下


完整代码

# coding:utf-8

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

class autoWrite(object):

   def __init__(self):

       '''
       初始化
       '''


       self.sysType = {}
       self.title = ''
       self.articleType = ''
       self.content = ''
       self.init_type()
       self.read_file()
       pass

   def init_type(self):
       '''
       初始化文件类型
       :return:
       '''

       self.sysType["移动开发"] = "428602"
       self.sysType["前端开发"] = "428612"
       self.sysType["人工智能"] = "5611447"
       self.sysType["服务端开发/管理"] = "428640"
       self.sysType["游戏开发"] = "429511"
       self.sysType["编程语言"] = "428609"
       self.sysType["数据库"] = "428610"
       self.sysType["企业开发"] = "428611"
       self.sysType["图像/多媒体"] = "428647"
       self.sysType["系统运维"] = "428613"
       self.sysType["软件工程"] = "428638"
       self.sysType["大数据"] = "5593654"
       self.sysType["云计算"] = "428639"
       self.sysType["开源硬件"] = "430884"
       self.sysType["其他类型"] = "430381"
       pass

   def read_file(self):

       '''
       读取文件部分
       :return:
       '''


       with open('english.txt', 'r') as f:

           # 读取文件的前两行
           for i in range(2):
               if i == 0:
                   self.title = f.readline()
               else:
                   self.articleType = f.readline()

           self.content = f.read()

       pass

   def publish_file(self):

       '''
       文件发布
       :return:
       '''


       user_main_url = 'https://my.oschina.net/u'

       username = 'xxx' # 改成你自己的账号与密码
       password = 'xxx'

       url = 'https://www.oschina.net/home/login'

       driver = webdriver.Firefox()
       driver.get(url)

       # 浏览器窗口最大化
       driver.maximize_window()

       driver.find_element_by_id('userMail').send_keys(username)
       driver.find_element_by_id('userPassword').send_keys(password)
       driver.find_element_by_xpath('//*[@id="account_login"]/form/div/div[5]/button').click()

       time.sleep(2)
       # 点击进入我的博客
       # 悬停时,出现新的块
       hoverControl = driver.find_element_by_xpath('//*[@id="MySpace"]')
       ActionChains(driver).move_to_element(hoverControl).perform()

       # 点击进入我的博客
       driver.find_element_by_xpath('/html/body/header/div/div[2]/div/div[2]/div/ul/li[4]/a').click()

       time.sleep(2)
       # print driver.page_source
       # 点击进入写作页。
       driver.find_element_by_xpath('/html/body/div/div/div/div/div[1]/div[1]/div[4]/a').click()

       time.sleep(1)

       # 填写标题
       titleInput = driver.find_element_by_xpath('//*[@id="title"]')
       # 这里需要对文字进行重新编码
       title = unicode(self.title, 'utf8')
       titleInput.send_keys(title)

       # 填写内容
       contentInput = driver.find_element_by_id('mdeditor')
       content = unicode(self.content, 'utf8')
       contentInput.send_keys(content)

       #注意这里取的文章文章类型,刚才有换行了,所以需要去掉\n
       articleType = self.articleType.strip('\n')

       # 选择文章的类型值,      
       js = 'document.getElementById("sys_sort").value="{}";'.format(self.sysType[articleType])
       print js
       driver.execute_script(js)

       # 修改选择的类型文本
       js = 'document.getElementsByClassName("select-show")[2].innerText="{}";'.format(articleType)
       print js
       driver.execute_script(js)

       # 点击提交
       submit = driver.find_element_by_xpath('//*[@id="blog-form"]/div[3]/div/button[2]')
       submit.click()

       print '发布成功!'
       pass


if __name__ == '__main__':
   auto = autoWrite()
   auto.publish_file()

虽然目前已经可以自运货发布文章了,但离商业应用还是有比较大的差距!后续我会继续改进

需要解决以下几个问题.

  1. GUI 操作肯定是要有的,不然发布的时候操作不便

  2. 图片上传问题

  3. selenium稳定性不好,容易出错.

  4. 突破登录问题

  5. 多平台发布问题

最后打个广告:刚创建了一个关于Python交流的知识星球,新开的星球,门票不高,后期会涨价,先来先享受优惠.

推荐阅读:

做微信公众号100天了

用Python来找合适的妹子(一)

使用Python自动化发布文章:(一)

Python爬虫:使用Python动态爬取冯大辉老师微博,再用词云分析

Python爬虫:动态爬取QQ说说并生成词云,分析朋友状况

Python爬虫:学习Selenium并使用Selenium模拟登录知乎

Python爬取大量数据时,如何防止IP被封

Python爬虫:现学现用xpath爬取豆瓣音乐


的Python之旅

长按,识别二维码,关注公众号



目前10000+人已关注加入我们



最后 :大家也可以加我个人微信:hg_liuzl,  务必注明:Python学习,拉你进群学习,一个纯粹的Python学习环境


友情链接