1. Problem
I want to create a script to put native blog file to csdn site.
2. Analysis
- Try to use csdn api, but meet error. I can not get access_token.
- Use selenium.
3. Requirement
- PyUserInput
- selenium
- pyperclip
- geckodriver
git clone https://github.com/PyUserInput/PyUserInput
cd PyUserInput
sudo python setup.py install
sudo pip install selenium
sudo pip install pyperclip
wget https://github.com/mozilla/geckodriver/releases/download/v0.14.0/geckodriver-v0.14.0-linux64.tar.gz
tar -zxvf geckodriver-v0.14.0-linux64.tar.gz
sudo mv geckodriver /usr/local/bin/
4. Code
write.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pymouse import PyMouse
from pykeyboard import PyKeyboard
import pyperclip
import time
m = 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 webdriver
import time
import write
import sys
def 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, content
def 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)