python批量整理邮箱附件_GitHub - 851579181/Auto-Download-QQEmail-File: Python + selenium + Chrome 模拟登陆QQ邮箱,批量...

批量下载QQ邮箱附件,下载完后修改文件重命名

因为工作原因,需要处理QQ邮箱上来自各地网友的投稿附件。数量比较多(上千份),如果手动一个一个下载非常麻烦。。。

而且有些发来的附件命名也不规范,下载下来之后还需要手动去重命名,否则放一起就分不清谁是谁了。而且也会出现大量重复的命名文件。

这种非常机械化的重复操作,我想写个脚本批量下载QQ邮箱附件。

于是临时研究了一下 Python + selenium + Chrome 来节省很多时间~

如何安装

如何使用

1 第一次使用时

初次启用脚本需手动登陆,勾选下次自动登陆 (记住密码)

以后再启用脚本时就可以实现自动登陆直接进入邮箱主页了。

不嫌麻烦,也可以先运行下面这段脚本来登陆

from selenium import webdriver

options = webdriver.ChromeOptions()

options.add_argument("user-data-dir=selenium")

chrome = webdriver.Chrome(options=options)

url = 'https://mail.qq.com/'

chrome.get(url)

print('登陆成功!')

注:通过运行脚本启动的浏览器窗口,只能同时启动一个。若重复启动脚本将会打开空页面,需要关闭上一个窗口重新运行脚本。

2 调整每页显示邮件数量

邮箱默认只显示25条邮件,需要在邮箱设置里,调整每页显示100封邮件。

3 邮箱文件夹

把你想要下载的邮件移动到文件夹里,方便区分。

4 新窗口打开文件夹

从邮箱左侧的面板‘我的文件夹’中找到你刚刚创建的文件夹,右键-新窗口打开

从浏览器的地址栏找到链接的几个参数: sid folderid page

https://mail.qq.com/cgi-bin/frame_html?t=frame_html&sid={ A }&url=/cgi-bin/mail_list?folderid={ B }%26page={ C }

5 修改脚本里面的自定义参数,然后启动脚本

主要有几个参数需要修改:

token..

这里有2个参数需要修改。 sid,和 folderid,登陆QQ邮箱后,会在浏览器地址栏可以看到。

token={'sid':'xxx', 'folderid':xxx, 'page': xxx}

附件下载路径.

浏览器下载的文件会自动保存在这里。

download_here='D:\\Downloads\\'

title.

也就是邮件列表。

如果你想从第10封邮件(从第1页第1封按顺序往下计算),然后只下载5封,就把start值改为10,step值改为5

title={'index':1, 'start':10, 'step':5}

pageInfo

也就是翻页的页面数据。这里你只需要修改step的值。

比如,你的邮件的文件夹,一共有16页,就把这里改为15。运行脚本后就会自动翻页,知道处理完第16页。

pageInfo={'now':0, 'max':0, 'step':15, 'isfilp':0, 'autofilp':True}

5.Debug模式

如果你不想要下载附件,只想以纯文本的方式收集一下发信人的情况。

发件人的名字,发件人的邮箱,邮箱里有多少附件。

这些都会在控制台里输出。

(当然,即使你不开debug模式,这些数据也会被输出。只是不想下载附件罢了)

DEBUG=1

对了,其实邮件发送的时间也有收集,但是拿到的是时间戳的方式timestamp因为我暂时不需要知道发信时间,所以脚本中我还没有处理这个。

6 下载完成后

可以运行自动生成在下载目录中的 _ren.bat 的批处理脚本。它将会把本次下载的文件补充收件人邮箱作为名称前缀。

注:如果目录中存在相同名称的文件,或者存在特殊符号的名称,可能会因为无法读取而被无视。需要手动进行重命名。

7 附加脚本:将含有关键词的文件移动到指定文件夹。

import os

import shutil

import fnmatch

def find_key(key,path):

for n in os.listdir(os.getcwd()):

if fnmatch.fnmatch(n, key):

print('{}:{}'.format(key,n))

shutil.move(n,path)

def checkfile():

all_md5 = {}

filedir = os.walk(os.getcwd())

for i in filedir:

for tlie in i[2]:

if md5sum(tlie) in all_md5.values():

print('- {}'.format(tlie))

shutil.move(tlie,'md5')

#os.remove(tlie)

else:

all_md5[tlie] = md5sum(tlie)

if __name__ == '__main__':

# 新建文件夹

# 提前新建好需要分类的文件夹

os.mkdir('psd')

os.mkdir('图片')

os.mkdir('反馈')

os.mkdir('VIP')

# 匹配关键词

# 文件格式来过滤:比如将.jpg的文件移动到‘图片’文件夹。

find_key('*.psd','psd')

find_key('*.PSD','psd')

find_key('*.jpg','图片')

find_key('*.png','图片')

# 关键词过滤:比如将含有‘issues’的文件名移动到'反馈'目录

find_key('*issues*.*','反馈')

find_key('*会员*.*','VIP')

特性

自定义文件下载路径夹

可以自定义脚本从第几封邮件开始,处理多少封邮件后结束。(如果start值超过当前页数范围将自动翻页)

自动翻页

如果邮件中没有包含附件,会自动打星标。

脚本结束后会生成一个批处理程序,运行后会自动为附件重命名。命名规则是在文件名前面添加'发件人邮箱'

可能出现的问题

运行脚本时,如果sid过期忘记更换,控制台会报错,提示找不到页面元素。element is not attached to the page document

(sid密钥更新时间通常是一天,也可能更短。发现浏览器地址栏sid参数跟脚本中的不一样时,尽快更换。)

如果网络不稳定。附件的预览图如果没有加载出来,脚本可能会卡住。

(已修复。解决方案:以不加载图片的模式启动浏览器)

如果窗口太小,可能获取不到页面元素,然后报错。

(已修复。解决方案:在启动浏览器时调整窗口大小至合适的值,主要是高度)

本地重命名的批处理脚本,如果附件有重复的文件,后面的相同的文件不会被重命名。

(没想好。临时解决方案:根据控制台输出的记录,搜索文件名,找到发件人昵称或者邮箱,手动重命名)

如果开车的速度过快,会被系统拦下车。提示:【您请求的频率太快,请稍后再试】

(没写完。临时解决方案:根据控制台输出的记录,从暂停的地方重新下载)

踩坑历史

附件收藏中的"全部附件",并不是想象中真的把全部附件整合在一起,还是会漏掉一些,关键是还不知道漏了哪些。

(解决方案:换成进入邮件主题下载附件)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值