分享

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

 网海拾贝网络猪 2020-02-05

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

操作演示:

视频内容

我先说说文章怎么发布.

  1. 首先准备一个你要发布的文章. 文章第一行是要发布文章的标题,第二行是要发布文章的类型.第二行以后都是文章的正文部分,最好是用Markdown,因为开源中国默认是markdown。
  1. 在下面代码的 read_file 方法中修改文件名.这里注意调整一下.
  2. 运行代码就可以了文章发布后效果图如下

完整代码

# coding:utf-8from selenium.webdriver.common.action_chains import ActionChainsfrom selenium import webdriverimport timeimport sysreload(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 '发布成功!' passif __name__ == '__main__': auto = autoWrite() auto.publish_file()

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

需要解决以下几个问题.

  1. GUI 操作肯定是要有的,不然发布的时候操作不便
  2. 图片上传问题
  3. selenium稳定性不好,容易出错.
  4. 突破登录问题
  5. 多平台发布问题

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约