Auto create csdn post

来源:互联网 发布:windows me u盘安装 编辑:程序博客网 时间:2024/05/20 17:28

1. Problem

I want to create a script to put native blog file to csdn site.

2. Analysis

  1. Try to use csdn api, but meet error. I can not get access_token.
  2. Use selenium.

3. Requirement

  1. PyUserInput
  2. selenium
  3. pyperclip
  4. geckodriver
git clone https://github.com/PyUserInput/PyUserInputcd PyUserInputsudo python setup.py installsudo pip install seleniumsudo pip install pyperclipwget https://github.com/mozilla/geckodriver/releases/download/v0.14.0/geckodriver-v0.14.0-linux64.tar.gztar -zxvf geckodriver-v0.14.0-linux64.tar.gzsudo mv geckodriver /usr/local/bin/

4. Code

write.py

#!/usr/bin/env python# -*- coding: utf-8 -*-from pymouse import PyMousefrom pykeyboard import PyKeyboardimport pyperclipimport timem = PyMouse()k = PyKeyboard()def writeContent(title, content):    m.click(300, 180, 1, 3)    time.sleep(1)    k.type_string(title)    m.click(300, 300, 1, 2)    time.sleep(1)    k.press_key(k.alt_key)    k.tap_key('a')    k.release_key(k.alt_key)    k.tap_key(k.delete_key)    #k.type_string(content)    pyperclip.copy(content)    m.click(300, 300, 1, 2)    time.sleep(0.5)    k.press_key(k.control_key)    k.tap_key('v')    k.release_key(k.control_key)def writeAbstract(abstract):    m.click(m.screen_size()[0]/2, m.screen_size()[1]/2, 1, 3)    time.sleep(1)    k.press_key(k.alt_key)    k.tap_key('a')    k.release_key(k.alt_key)    k.tap_key('space')    k.type_string(abstract)def addSetting(groups):    assert len(groups) < 5 and len(groups) > 0    # set 原创     pos = [621, 346]    m.click(pos[0], pos[1], 1, 3)    time.sleep(1)    pos = [621, 411]    m.click(pos[0], pos[1], 1, 1)    time.sleep(1)    # set article type    pos = [621, 390]    m.click(pos[0], pos[1], 1, 2)    time.sleep(0.5)    for g in groups:        k.type_string(g)        k.tap_key(k.enter_key)    time.sleep(1)    # set 综合    pos = [621, 674]    m.click(pos[0], pos[1], 1, 1)    time.sleep(1)    pos = [621, 640]    m.click(pos[0], pos[1], 1, 1)    time.sleep(1)if __name__ == "__main__":    #title="hello, csdn"    #content="test"    #writeContent(title, content)    addSetting(['linux','apple'])

addPost.py

#!/usr/bin/env python# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport writeimport sysdef pause(length=1):    time.sleep(length)def addPost(title, content, abstract, groups):    b = webdriver.Firefox()    pause(1)    b.get("http://blog.csdn.net/duinodu")    pause(2)    b.find_element_by_link_text('登录').click()    pause(5)    b.find_element_by_id('username').send_keys('username')    pause(1)    b.find_element_by_id('password').send_keys('password')    pause(1)    b.find_element_by_class_name('logging').click()    pause(5)    b.find_element_by_link_text('写新文章').click()    pause(5)    write.writeContent(title, content)    b.find_element_by_link_text('发表博客').click()    pause(3)    write.writeAbstract(abstract)    b.find_element_by_link_text('下一步').click()    pause(3)    write.addSetting(groups)    b.find_element_by_link_text('发布').click()    pause(3)def readBlog(filename):    with open(filename, 'r') as fid:        lines = fid.readlines()        title = lines[0].split('\n')[0]        groups = lines[1].split('\n')[0].split(' ')        abstract = lines[2].split('\n')[0]        content = ""        for line in lines[4:]:            content += line        return title, groups, abstract,  contentdef main(argv):    assert(len(argv) == 2)    title, groups, abstract,  content = readBlog(argv[1])    #print content    addPost(title, content, abstract, groups)if __name__ == "__main__":    print(__doc__)    import sys    main(sys.argv)

5. Usage

python addPost.py newblog.md

P.S: This post is created by addPost.py automatically.

newblog.md

New blog (title)linux vim (type)It is a blog (abstraction)LaLaLa...(Content)
1 0
原创粉丝点击