本文是在上一篇文章 使用Python自动化发布文章:(一) 基础上加以改进而来的. 可以完成自动化发布文章。 操作演示: 我先说说文章怎么发布.
完整代码# 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() 虽然目前已经可以自运货发布文章了,但离商业应用还是有比较大的差距!后续我会继续改进 需要解决以下几个问题.
|
|