使用selenium和requests的方法获取163邮箱的所有邮件

前言

说明:23年暑假找了个公司赚点生活费。其中我的任务是copy163邮箱的邮件,然后将邮件的内容复制到公司的销售系统(53快服)。

在这里插入图片描述

任务可以分以下几步:

  • 1、复制邮件内容

  • 2、根据邮件内容,分割提取信息

  • 3、将信息填到客服系统

如果不使用脚本,原始人纯手戳,每天一两来条邮件,个人感觉还是可以接受的,那么一天两千多条,就是不吃饭也干不完。下面这个图是每天要录入系统的邮件数据量,可以看到一天邮件数量峰值达到2600条左右,可以说这个量以及不再是纯手戳能够承受得了的了

在这里插入图片描述

当我接到这个任务的时候离数据爆发增长还有不到一周时间,为此在前两天干完活的闲余时间琢磨如何使用python帮我完成这个任务。

经过我大量查找网上的相关资料,总结为以下几个方法。

  • 方法一、通过Urllib实现

    这种方法主要是应用requests请求的方法,获取邮件需要找到对应的url链接。关键步骤如下:

    • 1、模拟登录163邮箱,并获取收件箱邮件的url;
    • 2、获取cookie信息;
    • 3、提取邮件对应的sid数据;
    • 4、利用sid和cookie重新请求,获得响应;
    • 5、提取收件箱列表信息。
  • 方法二、使用第三方的邮件协议

    这种方法需要邮箱打开第三方的邮件协议。有对应的第三方库专门处理邮件。由于我当时的邮箱没有权限开打开第三方邮件协议,因此就没考虑这种方法。

  • 方法三、使用selenium模拟登录邮箱,获取网页信息,然后提取

    selenium的用法很接近于人的操作习惯,实现的过程主要分为两步:

    • 1、使用selenium模拟登录邮箱;
    • 2、使用beautifulsoup处理网页,提取未读邮件的信息。
  • 方法四、模拟点击,模拟复制邮件,然后提取信息

    这个是类似selenium的思路想到的。大量的邮件信息提取,我们可以人为打开浏览器,进入163收件箱邮件列表页,然后使用pyautoguipyperclip模拟键鼠操作,循环复制、粘贴、保存每一封邮件。

传送门

方法三的实现可以参考我的这篇文章:采用selenium和beautifulsoup获取163邮箱邮件内容

方法四的实现可以参考我的这篇文章:采用pyautogui和pyperclip获取163邮箱邮件内容

使用selenium和requests的方法获取163邮箱的所有邮件

本文主要是参考方法一的思路,使用requests的方法获取163邮箱的邮件信息。

方法一的难点如下:

  • 1、登录163次数超过一定数量后会有滑动验证;
  • 2、获取收件箱邮件的请求如何找到。

为了避免掉滑动验证这个问题,我们采用selenium登录163邮箱,在出现滑动验证的时候人为滑动验证就行。因此问题的重点在于我们登录邮箱后如何找到邮件的url请求,找到了这个请求我们就可以使用requests请求获取请求响应,得到邮件信息。

找到邮件的url请求

在这里插入图片描述

登录邮箱,点击进入收件箱,按快捷键F12打开浏览器开发者工具,在Fetch/XHR栏找到了收件箱邮件的请求包,我们在右侧的preview栏看到的内容就是收件箱的当前页的所有邮件信息。(找到这个请求包是需要经验的,实在不行只能一个一个包看,说实话这步时比较难的,好的是抓取163邮件前人做过,可以直接看别人抓的哪个包)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击Headers查看请求头,可以看出获取163邮件的这个请求是POST请求,请求链接为:https://mail.163.com/js6/s?sid=CCGXGcDDURnhdXKNCTDDsadFTHxTiiYc&func=mbox:listMessages。请求中还包括cookies信息,我们将请求头的Origin,Referer,User-Agent参数也添加到请求中去。

在这里插入图片描述

点击Pyload,可以看到这个请求的额外参数,Query String Parameters参数有两个,一个是sid,一个是func。这两个参数在请求链接上直接有体现。Form Data参数为var,该参数限定了该请求获取邮件的格式和数量。我们获取该页的所有邮件则需要将这两个参数也添加到请求当中去。

需要注意的是Query String Parameters参数sid不是固定的,每一次登录查看sid都会不一样。

总结:抓包发现收件箱邮件的请求为POST请求,重点是找到cookies和sid。别的参数都是可以通过浏览器工具查看请求头参数复制过去的。

获取到cookies

使用Selenium可以方便地获取和管理浏览器的Cookies。以下是使用Python和Selenium获取Cookies的示例代码:

from selenium import webdriver

# 创建一个浏览器实例
driver = webdriver.Chrome()

# 打开目标网页
driver.get("https://example.com")

# 获取所有的Cookies
cookies_list = driver.get_cookies()

# 打印每个Cookie的名称和值
for cookie in cookies_list:
    print("Name:", cookie['name'])
    print("Value:", cookie['value'])
    print("-------------")

# 关闭浏览器
driver.quit()

在上面的示例中,我们首先创建了一个浏览器实例(这里使用的是Chrome浏览器),然后通过driver.get(url)打开了目标网页。接下来,我们使用driver.get_cookies()方法获取了当前页面的所有Cookies,并将其存储在cookies变量中。最后,我们遍历cookies列表,并打印出每个Cookie的名称和值。

我们使用Selenium成功登录163邮箱,网站会保存一个cookies,我们下次获取163收件箱邮件时的请求带上这个cookies参数。获取到的cookies是列表类型,需要将其转换为字典类型作为requests请求的参数。转换的代码如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值