当前位置: 首页 > news >正文

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的文章转移到印象笔记的代码文件

使用的模块:

  1. selenium模块:操控浏览器,获取文章链接并点击
  2. time模块:时间等待,控制进度
  3. json模块:获取Get_cookie.py文件运行后保存下的cookie值并转换格式,提供给selenium模块进行访问浏览器,达到自动登录的效果
  4. 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()

🌴演示说明

  1. 先在电脑上打开印象笔记,并创建好一个笔记本用于保存文章,例如:我创建了一个Git&GitHub的文件
    在这里插入图片描述
  2. 将笔记的窗口最小化,然后点击“新建笔记”,弹出一个笔记窗口后,调整窗口的位置,这样以后点击“新建笔记”时,窗口会出现在之前调整的位置上,方便进行下一步的操作,如下图
    在这里插入图片描述
  3. 运行CSDN_to_Evernote.py,弹出浏览器后将浏览器横缩至最小,然后放在离印象笔记稍微远的位置,防止重叠覆盖掉关键图片,从而定位不了图片位置,无法模拟鼠标进行点击,如下图
    在这里插入图片描述
  4. 整体运行效果
    在这里插入图片描述

💥结束(重点)

🚀 到这里可能有的同学就会问了,那关键图片是啥?
在这里插入图片描述
这就需要大家推理啦~~哈哈哈哈😜(答案在下一篇文章揭晓哦😄)
想知道答案?就在这👉GitHub CSDN文章自动转移印象笔记
github上有完整的代码文件和图片,感兴趣的同学可以试一试哦~

相关文章:

  • 图像处理学习笔记-04-频率域滤波04
  • Halcon学习---光学字符识别(OCR)
  • 【电商数仓】数仓搭建之DIM维度层(商品、优惠券、活动、地区、时间维度表)
  • class11:cookie和session
  • 一些常用的刷题网站
  • Python自动化小技巧11——excel文件的文字内容筛选
  • ArrayList的源码分析
  • 不支持TLS的设备如何实现游客登录加密通信方案
  • 【Pandas 数据分析3-2】Pandas 数据读取与输出 - Excel
  • TiDB Dashboard 实例性能分析 - 持续分析页面
  • Spring Boot 集成 Redis 配置 MyBatis 二级缓存
  • 9 二叉树-添加
  • SSM进阶-搭建Dubbo
  • STM32F103 CAN通讯实操
  • JAVA-----注释、字面量、关键字、制表符
  • [数据结构]链表的实现在PHP中
  • 【React系列】如何构建React应用程序
  • Android Volley源码解析
  • Angular6错误 Service: No provider for Renderer2
  • CentOS 7 修改主机名
  • exif信息对照
  • express如何解决request entity too large问题
  • go语言学习初探(一)
  • Java方法详解
  • node和express搭建代理服务器(源码)
  • Phpstorm怎样批量删除空行?
  • Service Worker
  • session共享问题解决方案
  • springboot_database项目介绍
  • vue2.0项目引入element-ui
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 不上全站https的网站你们就等着被恶心死吧
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于springcloud Gateway中的限流
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前嗅ForeSpider教程:创建模板
  • 删除表内多余的重复数据
  • 深入浏览器事件循环的本质
  • 使用API自动生成工具优化前端工作流
  • 线性表及其算法(java实现)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用element的upload组件实现多图片上传和压缩
  • 在weex里面使用chart图表
  • 2017年360最后一道编程题
  • 我们雇佣了一只大猴子...
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $ git push -u origin master 推送到远程库出错
  • (poj1.2.1)1970(筛选法模拟)
  • (ZT)出版业改革:该死的死,该生的生
  • (接口封装)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原創) 未来三学期想要修的课 (日記)