前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python自动化发布文章(二)

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

作者头像
龙哥
发布2018-10-22 14:22:54
8270
发布2018-10-22 14:22:54
举报

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

操作演示:

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

完整代码

# 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. 多平台发布问题
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 我先说说文章怎么发布.
  • 完整代码
  • 需要解决以下几个问题.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档