需求说明

公众号文章,还有付费订阅的一些专栏课程只能在手机或者电脑上阅读, 对于一直喜欢用kindle来阅读的我来说有些痛苦,就想着有没有办法每天自动把当天要阅读的新文章自动推送到kindle上,这样能极大提升自己的阅读体验。 作为程序员,作为python程序员,一定是要想办法自动化的,在网上搜了一圈,发现这个新发布的python自动化开发工具clicknium不错, 就开始动手尝试.

环境准备

本人开发环境:windows 10, visual studio code

  • 参见 getting started

  • 根据扩展的提示说明,安装Clicknium Python module

本人使用chrome浏览器,所以需要安装clicknium chrome extension。

创建项目

直接新建一个folder

方案思路

这里以知识星球举例

  • 进入一个专栏

  • 然后通过python 自动化去抓取文章列表以及时间信息,只抓取当天的新文章

  • 然后打开每个文章,利用浏览器打印功能,选择“Microsoft Print PDF”打印机,将文章保存到到一个指定目录下

  • 通过发送邮件的方式将pdf文件发送给kindle,这里需要使用python的两个库:email(用来构造邮件)和smtplib(用来发送邮件)

购买的 Kindle 每个设备都会绑定一个邮箱作为收件地址,格式类似于:xxxx_xx@kindle.cn。可以在 Kindle 中 全部设置->我的账户 的最下面查看该设备的邮件地址,也可以进行配置,这个可以自行查找kindle的相关文档说明.

首先录制专栏文章的‘...’ 和时间,都是div

编辑切换为居中

添加图片注释,不超过 140 字(可选)

然后编辑选择器,加上参数{{index}}

然后代码里循环遍历每个文章,根据时间来判断是否是今天的新文章

i = 1
while True:v = {"index": i}if cc.is_exist(locator.WebPageToKindle.zsxq.div_index, v, 3):date = cc.find_element(locator.WebPageToKindle.zsxq.div_date, v).get_text()if '昨天' in date:breakcc.find_element(locator.WebPageToKindle.zsxq.div_index, v).click(by="mouse-emulation")sleep(1)cc.find_element(locator.WebPageToKindle.zsxq.div_复制链接, v).click()sleep(2)url = pyperclip.paste()pdffile = save_pdf(url, datetime.now().strftime('%Y%m%d%H%M%S'))send_email(pdffile)i = i+1else:break

说明:循环遍历,如果存在,并且时间是今天的文章,则点击复制链接

然后使用lib `pyperclip ` 来获取剪切板内容,再save_pdf,如下

def save_pdf(url,path):file_name = str(path) + '.pdf'if os.path.exists(file_name):passelse:print(file_name)file_path = os.path.join(os.getcwd(),file_name)driver = cc.chrome.open(url)ui(locator.WebPageToKindle.zsxq.span_详情).send_hotkey('{CTRL}{p}')sleep(3)cc.send_hotkey('{ENTER}')sleep(3)cc.wait_appear(locator.WebPageToKindle.zsxq.saveas_edit)ui(locator.WebPageToKindle.zsxq.saveas_edit).set_text(file_path, InputTextBy='set-text')ui(locator.WebPageToKindle.zsxq.saveas_saveBtn).click()sleep(3)driver.close()return file_path

说明:会打开复制的链接,然后在打开的页面上发送快捷键Ctrl+p, 弹出打印窗口,这里提前设置好打印机为

然后发送快捷键‘Enter’,等待另存为窗口弹出,

输入保存路径,点击‘保存’按钮

保存完pdf,接着发送邮件,会自动推送到kindle

通过以上的方式,可以做到自动化推送订阅的新文章到kindle上了,推送其他订阅公众号文章,课程等都可以是类似方式。

附:完整代码, 录制的locator可以自行使用clicknium提供的录制器来录制,操作教程可以看clicknium vscode的说明,非常详细,赞一个。

from datetime import datetime
from time import sleep
from clicknium import clicknium as cc, locator, ui
import os
import pyperclip
import os.path
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email import encoders_user = "*@hotmail.com"
_pwd  = ''
_to   = "*@kindle.cn"def send_email(pdf_file):# set up the SMTP servers = smtplib.SMTP(host='smtp.office365.com', port=587)s.starttls()s.login(_user, _pwd)print('connection good')msg = MIMEMultipart()msg['Subject'] = 'convert'  #邮件标题msg['From'] = _user #显示发件人msg['To'] = _to #接收邮箱attfile = pdf_filebasename = os.path.basename(pdf_file) print(basename)fp = open(attfile,'rb')att = MIMEText(fp.read(),'base64','gbk')att['Content-Type'] = 'application/octer-stream'att.add_header('Content-Disposition', 'attachment',filename=('gbk', '', basename))encoders.encode_base64(att)msg.attach(att)s = smtplib.SMTP("smtp.office365.com",587)s.ehlo() # Hostname to send for this command defaults to the fully qualified domain name of the local host.s.starttls() #Puts connection to SMTP server in TLS modes.ehlo()s.login(_user, _pwd)#登陆服务器s.sendmail(_user, _to, msg.as_string())#发送邮件s.close()def save_pdf(url,path):file_name = str(path) + '.pdf'if os.path.exists(file_name):passelse:print(file_name)file_path = os.path.join(os.getcwd(),file_name)driver = cc.chrome.open(url)ui(locator.WebPageToKindle.zsxq.span_详情).send_hotkey('{CTRL}{p}')sleep(3)cc.send_hotkey('{ENTER}')sleep(3)cc.wait_appear(locator.WebPageToKindle.zsxq.saveas_edit)ui(locator.WebPageToKindle.zsxq.saveas_edit).set_text(file_path, InputTextBy='set-text')ui(locator.WebPageToKindle.zsxq.saveas_saveBtn).click()sleep(3)driver.close()return file_pathi = 1
while True:v = {"index": i}if cc.is_exist(locator.WebPageToKindle.zsxq.div_index, v, 3):date = cc.find_element(locator.WebPageToKindle.zsxq.div_date, v).get_text()if '昨天' in date:breakcc.find_element(locator.WebPageToKindle.zsxq.div_index, v).click(by="mouse-emulation")sleep(1)cc.find_element(locator.WebPageToKindle.zsxq.div_复制链接, v).click()sleep(2)url = pyperclip.paste()pdffile = save_pdf(url, datetime.now().strftime('%Y%m%d%H%M%S'))send_email(pdffile)i = i+1else:break

用python自动推送文章到kindle相关推荐

  1. python自动推送消息_Python自动接收微信群消息并推送相应的公众号文章

    原标题:Python自动接收微信群消息并推送相应的公众号文章 封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 用书教师可以联系 ...

  2. Python 自动推送百度收录脚本

    Python 自动推送百度收录脚本 版权属于:瞌学家 所有,转载请注明出处 本文链接:https://www.songonline.top/archives/185/ 友情提示: 如果文章部分链接出现 ...

  3. python自动推送消息_使用Python制作自动推送微信消息提醒的备忘录功能

    日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时,导致错过的尴尬.如果有一款小工具,可以及时提醒,而不用再主动去查备忘 ...

  4. python自动推送消息_用Python设计一个可以自动推送微信消息提醒的备忘录

    请关注微信公众号:金融数学 FinancialMathematics日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时, ...

  5. Python实现每日自动推送URL到百度站长收录

    前言 闲来无事,看了下自己写的博客没有一篇文章被百度收录,无奈只好写了一个百度主动提交工具的小脚本,实现每日自动爬取当前博客文章并推送文章URL到百度站长收录,提高下曝光率. 解决 其实百度站长后台也 ...

  6. Python连接钉钉群机器人每天自动推送国外天气

    Python连接钉钉群机器人每天自动推送国外天气 一.天气获取 我使用的是openweather api,这个api的官方文档写的十分详细,链接:openweather 打开链接,界面如下: 目前只有 ...

  7. [自制工具]实现自动推送Hexo博客文章至百度

    写在前面 我们在博客发布文章时,总是希望百度能尽快收录我们的文章,但是如果傻傻等百度爬虫爬到我们这种小站点的文章--不知道要等到何年何月= =基于此,百度站长平台提供了主动推送文章至百度的接口.但是这 ...

  8. python爬虫如何实现每天爬取微信公众号的推送文章

    python爬虫如何实现每天爬取微信公众号的推送文章 上上篇文章爬虫如何爬取微信公众号文章 上篇文章python爬虫如何爬取微信公众号文章(二) 上面的文章分别介绍了如何批量获取公众号的历史文章url ...

  9. python 实时数据推送_python scrapy 爬取金十数据并自动推送到微信

    一.背景 因业务需要获取风险经济事件并采取应对措施,但因为种种原因又疏忽于每天去查看财经日历,于是通过爬取金十数据网站并自动推送到微信查看. 二.目标实现 image 三.环境与工具 1.pychar ...

最新文章

  1. ktor框架用到了netty吗_教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor
  2. 号称3个月发布最强量子计算机,卖口罩的霍尼韦尔凭什么?
  3. 极米亮相CES展 首推3000元内1080p无屏电视
  4. android 9.0 https 适配,android9.0适配HTTPS:not permitted by network security policy'
  5. 为了今年印象最深刻的唱片,转演唱会消息一个,虽然我去不了 55555
  6. 《代码阅读方法与实践》阅读笔记一
  7. AngularJs学习笔记--unit-testing
  8. 数据中心空调系统应急方案
  9. python 消息队列 sqlite_sqlite 数据存储 消息队列
  10. 汽车保险解读:解析涉水损失险与自燃险
  11. Hibernate初探(二)
  12. redis源码剖析(十一)—— Redis字符串相关函数实现
  13. antd 怎么用ajax,react+dva+antd接口调用方式
  14. .NET PPT控件 Spire.Presentation for .NET V2.8发布 | 附下载
  15. 2021年中国动物血浆制品及其衍生物市场趋势报告、技术动态创新及2027年市场预测
  16. Ubuntu Mysql安装配置
  17. 第6篇 Java中的接口与抽象类
  18. 吴裕雄 python 机器学习——数据预处理过滤式特征选取SelectPercentile模型
  19. 敏捷思维-架构设计中的方法学(12)Refactoring
  20. 转载_ANC降噪学习

热门文章

  1. STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
  2. 面试经历---网易(2016年01月19日下午面试)
  3. 过完双11,我去闲鱼当二道贩子
  4. 电脑任务栏突然变得很宽很大
  5. 所有域名都需要实名认证吗?域名实名认证有什么好处?
  6. 谷歌掐架甲骨文:揭秘Java侵权案始末
  7. 关于密码测评,你必须了解的10个基本问题
  8. Unresolveable build extension: Plugin...or one of its dependencies could not be resolved: Failed to
  9. Unity2017 经典游戏开发教程 算法分析与实现 (张帆 著)
  10. Win10中Jenkins的安装和基本使用流程