CSDN文章自动转移到印象笔记?一怒之下的我“揍”出了代码~
文章目录
- 🌻 又哔哔赖赖
- 🍄正儿八经说
- ⚠️用前须知
- 🌵Get_cookie.py
- 🌵CSDN_to_Evernote.py
- 🌴演示说明
- 💥结束(重点)
🌻 又哔哔赖赖
来咯来咯~~真的来咯~~
喜欢本篇文章的朋友可 点赞👍 收藏🌈 关注💖 非常感谢🌞
💥呦~《小玩意儿》带着它New儿文章!半夜回归……
现在敲下这一篇文章的时间是2022-9-29 23:19分,本人呼吸正常、体温正常、血压正常、脉搏正常、脑子……
👴脑瓜子儿也还锃亮,依旧发光发热,……不知道此时的你们是在做些什么?
工作?学习?看视频?玩游戏?睡……不会有人这个点就睡了吧……😵
👉还记得在两三周以前,我整理了《Python零基础入门篇》专栏里的文章,将富文本编辑改成Markdown编辑,再细分内容重新发表,结果该专栏从原来的二十几篇文章变成了现在的四十三篇文章……
❗️ 重点是,哥们花了一两周的时间整理好文章后,不知道是哪根筋抽抽的了,想着把CSDN的文章转到印象笔记中存起来……
📣然后哥们花了几个小时的时间手动复制CSDN的文章的标题和内容,然后再在印象笔记中粘贴标题和内容,最后还要修改一下才能保存……给哥们整emo了~~ 真的emo了~~😭
💡直到有一天,哥们我实在绷不住了,这是人干的事❓💢在我写完《小玩意儿》专栏的第三篇文章后,忍无可忍的我花了一个小时左右的时间,劈里啪啦、呜哩哗啦、嘻嘻哈哈、巴巴拉拉、哇挖嘎嘎……的“揍”出了这自动转移文章的代码,看见它运行成功的那一刻,我……
✂️好了,不哔哔赖赖了,咱们得正儿八经了👇
🍄正儿八经说
本次代码呈现的出的是一个默然无声的鼠标和一个不会发出声响的键盘,在电脑屏幕上快速的点击,然后输入内容。没有这么震撼人心的效果,也没有上一篇文章那样有令人潸然泪下的数据表,但你会为它的不知疲倦的点击、输入内容、点击、输入内容、点击……而感动,它的努力,为你节省大量的时间和精力……
收收收⚠️
⚠️用前须知
本次代码实现的是一个自动转移CSDN文章到印象笔记的代码,针对的文章为Markdown编辑器编辑的文章,且须有目录(如下图)。若想转移其他类型的文章,各位可以在代码的基础上修改,因本博主常用Markdwon编辑器编写文章,所以未写能转移富文本编辑的文章,还请见谅。
🌵Get_cookie.py
Get_cookie.py是……,这熟悉吗?看过我写的《小玩意儿》专栏里的前两篇文章应该都懂得透透的吧😳
不过我还是粘上代码,照顾一下其他童鞋👏
👉Get_cookies.py 是获取登录后的cookie的程序代码
为了避免每次进入CSDN都要登录,于是我们先获取登录后的Cookie值,以后运行程序再次进入CSDN时就不用再手动登录了,可谓是“一劳永逸”!
注意:记得在10秒内登录哦!
from selenium import webdriver
from time import sleep
import json
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://passport.csdn.net/login?code=public')
sleep(10)
dictCookies = driver.get_cookies() # 获取list的cookies
jsonCookies = json.dumps(dictCookies) # 转换成字符串保存
with open('csdn_cookies.txt', 'w') as f:
f.write(jsonCookies)
print('cookies保存成功!')
代码运行结束后,会生成一个保存cookies的txt文件
🌵CSDN_to_Evernote.py
CSDN_to_Evernote.py 是将CSDN的文章转移到印象笔记的代码文件
使用的模块:
- selenium模块:操控浏览器,获取文章链接并点击
- time模块:时间等待,控制进度
- json模块:获取Get_cookie.py文件运行后保存下的cookie值并转换格式,提供给selenium模块进行访问浏览器,达到自动登录的效果
- pyautogui模块:模拟键盘鼠标进行自动操作,主要进行读取保存的关键图片,根据图片查找屏幕中是否出现,出现后模拟键盘鼠标进行相应的操作
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import json
import pyautogui
class CSDN(object):
def __init__(self):
# 实例化driver对象
self.driver = webdriver.Chrome()
def login(self):
self.driver.get('https://mp.csdn.net/mp_blog/manage/article?')
# 获取保存下的cookie值
with open('csdn_cookies.txt', 'r', encoding='utf8') as f:
listCookies = json.loads(f.read())
# 往browser里添加cookies
for cookie in listCookies:
cookie_dict = {
'domain': '.csdn.net',
'name': cookie.get('name'),
'value': cookie.get('value'),
"expires": '',
'path': '/',
'httpOnly': False,
'HostOnly': False,
'Secure': False
}
self.driver.add_cookie(cookie_dict)
self.driver.refresh() # 刷新网页,cookies才成功
# 等待内容管理加载完毕后点击
WebDriverWait(self.driver, 1000).until(
EC.presence_of_element_located((By.XPATH, '//ul[@role="menu"]/li/a[text()="内容管理"]'))
)
# 点击内容管理
self.driver.find_element(By.XPATH, '//ul[@role="menu"]/li/a[text()="内容管理"]').click()
# 分析网页
def parse_page(self):
"""
用户选择好分栏并点击后,输入1,程序继续运行
:return:
"""
print('\n请确认是否已选择专栏,点击搜索……')
user1 = input('确认无误后请输入1,进行下一步操作……:')
# 等待文章url加载
WebDriverWait(self.driver, 1000).until(
EC.presence_of_element_located((By.XPATH, '//p[@class="article-list-item-txt"]/a'))
)
time.sleep(2)
# 用try来进行下一页的搜索
page_urls = [] # 存储文章url
while True:
try:
# 先添加文章url和文章标签
page_urls += [ele.get_attribute('href') for ele in self.driver.find_elements(By.XPATH, '//p[@class="article-list-item-txt"]/a')]
# 点击下一页
self.driver.find_element(By.XPATH, '//*[@id="view-containe"]/div/div/div[4]/div/button[2]').click()
time.sleep(3)
except:
break
# 调用修改文章为粉丝可见的函数
self.change_fans(page_urls)
# 获取文章的url并点击,修改文章为粉丝可见
def change_fans(self, page_urls):
for page_url in page_urls:
self.driver.get(page_url)
time.sleep(3)
try:
# 点击发布博客
button = self.driver.find_element(By.XPATH, '//div[@id="moreDiv"]/div[10]/div/div/div[2]/button')
if button.is_enabled():
continue
except:
self.move()
# 将CSDN中的文章转移到印象笔记
def move(self):
# 点击CSDN标题
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/1.png')
x, y = pyautogui.center(r)
pyautogui.doubleClick(x, y)
pyautogui.leftClick(x, y)
# 复制标题
pyautogui.hotkey('ctrl', 'c')
# 点击印象笔记的更多新建
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/2.png')
x, y = pyautogui.center(r)
pyautogui.leftClick(x, y)
# 点击Markdown编辑
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/3.png')
x, y = pyautogui.center(r)
pyautogui.leftClick(x, y)
# 点击标题
time.sleep(1)
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/4.png')
x, y = pyautogui.center(r)
pyautogui.doubleClick(x, y)
# 粘贴复制的文本
pyautogui.hotkey('ctrl', 'v')
# 点击CSDN文章的目录
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/5.png')
x, y = pyautogui.center(r)
pyautogui.doubleClick(x, y)
# 按下alt + a
pyautogui.hotkey('ctrl', 'a')
pyautogui.hotkey('ctrl', 'c')
# 点击印象笔记的空白处
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/6.png')
x, y = pyautogui.center(r)
pyautogui.leftClick(x, y)
# 粘贴
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
# 点击打叉印象笔记窗口
r = None
while r is None:
r = pyautogui.locateOnScreen('./photo/7.png')
x, y = pyautogui.center(r)
pyautogui.leftClick(x, y)
# 文章移动
def run(self):
user = int(input('请输入专栏的数目:'))
self.login()
for i in range(user):
self.parse_page()
csdn = CSDN()
csdn.run()
🌴演示说明
- 先在电脑上打开印象笔记,并创建好一个笔记本用于保存文章,例如:我创建了一个Git&GitHub的文件
- 将笔记的窗口最小化,然后点击“新建笔记”,弹出一个笔记窗口后,调整窗口的位置,这样以后点击“新建笔记”时,窗口会出现在之前调整的位置上,方便进行下一步的操作,如下图
- 运行CSDN_to_Evernote.py,弹出浏览器后将浏览器横缩至最小,然后放在离印象笔记稍微远的位置,防止重叠覆盖掉关键图片,从而定位不了图片位置,无法模拟鼠标进行点击,如下图
- 整体运行效果
💥结束(重点)
🚀 到这里可能有的同学就会问了,那关键图片是啥?
这就需要大家推理啦~~哈哈哈哈😜(答案在下一篇文章揭晓哦😄)
想知道答案?就在这👉GitHub CSDN文章自动转移印象笔记
github上有完整的代码文件和图片,感兴趣的同学可以试一试哦~