自动化收邮件

自动化收取你的163邮箱信息


今日知图

行数移动

gg  英文单词go 文件顶部
G   文件末尾
数字gg 移动到数字对应行数
数字G 移动到数字对应行数
:数字 移动到数字对应行数

0.说在前面1.模拟登陆2.收件箱信息3.结果展示4.作者的话


0.说在前面

需求

由于需求,我最近自己搞了两个大项目,哈哈,开个玩笑,比较小~~

需求一:对知乎所有评论进行可视化及知识图谱建立,利用机器学习基神经网络训练知识图谱,进一步的增强用户的联系,扩充实体关联,这个就比较难了,还在进行时,哈哈~~

需求二:就是大家看到的标题,163邮箱问题,我想下载我邮箱里面的所有数据,比如收件箱的信息及附件等。今天分享163邮箱模拟登录及收件箱信息爬取~~

吐槽

这两天特别累,事情特别多~~还是坚持给各位发文章,保证每日一篇

不管怎么样,还是坚持下去!

技术点

采用selenium模拟登录,利用xpath提取数据~~

下面我们一起来看163问题~~

1.模拟登陆

分析

如下图所示,我们先来定位一下,登录的基本信息~

当我们第一次打开这个页面的时候,iframe是刷新以后才可以登录,所以必须得等它动态加载完毕,才可以~

封装

初始化,我们定义了三个list分别存储,邮件标题,收件箱的信息来自于某位用户,以及邮件时间。

    def __init__(self):
        # 调用Chrome Driver登陆163邮箱
        driver = webdriver.Chrome()
        self.driver = driver
        title_list = []
        sender_list = []
        time_list = []
        self.title_list = title_list
        self.sender_list = sender_list
        self.time_list = time_list

模拟登陆

如下图定位:

    def login(self):
        # 等待页面完全加载
        self.driver.implicitly_wait(15)
        self.driver.get('http://mail.163.com/')
        # 因为163登录入口在iframe里面,所以先要切换到iframe
        frame = self.driver.find_element_by_xpath('//iframe[starts-with(@id,"x-URS-iframe")]')
        self.driver.switch_to.frame(frame)
        # 使用driver将账号密码填进表单并提交
        # 填入用户名及密码
        self.driver.find_element_by_xpath("//input[@name='email']").send_keys('xxx@163.com')
        self.driver.find_element_by_xpath("//input[@name='password']").send_keys('xxxx')
        self.driver.find_element_by_id('dologin').click()
        return self.driver

2.收件箱信息

数据抽取

这里将数据进行抽取,提取出标题,邮件来自,时间,如下图:

    def page_Info(self,html):
        selector = etree.HTML(html)
        text = selector.xpath('//div[@sign="letter"]/@aria-label')
        print(text)
        for each_text in text:
            print(each_text)
            email_title = each_text.split('发件人 :')[0].strip()
            self.title_list.append(email_title)
            print(email_title)
            email_sender = each_text.split('发件人 :')[1].split('时间:')[0].strip()
            self.sender_list.append(email_sender)
            print(email_sender)
            email_time = each_text.split('发件人 :')[1].split('时间:')[1].strip()
            self.time_list.append(email_time)
            print(email_time)
            print(self.title_list)
            print(self.sender_list)
            print(self.time_list)

单页面处理

首先进行登录,登陆后,让页面刷新完成后,所以这里设置了10秒后爬起,定位到收件箱,进行自动化点击,调用上述方法进行爬取!

同时可以在当前页获取总页面数!如下图所示,1/2通过取出最后一个数字便为总页面数!

    def process_Info(self):
        driver = self.login()
        time.sleep(10)
        driver.switch_to.default_content()
        # 点击收件箱按钮加载邮件列表
        driver.find_element_by_id('_mail_component_67_67').click()
        time.sleep(5)
        driver.switch_to.default_content()
        # 获取总的翻页数
        sum_page = int(driver.find_element_by_class_name('nui-select-text').text.split('/')[-1])
        print('总页数为 ' + str(sum_page) + "页")
        html = driver.page_source
        print(html)
        self.page_Info(html)

多页面数

还是上述那个页面,我们可以定位到下一页的标签,进行自动化点击,抓取下一页数据即可!

for i in range(1,sum_page):
    time.sleep(7)
    driver.switch_to.default_content()
    # 点击下一页按钮加载邮件列表
    email_ext = driver.find_element_by_class_name('nui-toolbar-ext')
    email_ext = email_ext.find_elements_by_class_name('nui-toolbar-item')[-2]
    email_ext = email_ext.find_elements_by_tag_name('div')[-1]
    email_ext.click()
    time.sleep(7)
    driver.switch_to.default_content()
    html = driver.page_source
    print(html)
    self.page_Info(html)

3.结果展示

本文分享自微信公众号 - 光城(guangcity),作者:lightcity

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如醉如痴之最小堆

    一道简单的题,可以让你如醉如痴,更是因为这一道题,你才会学会很多,不要小看简单,简单中蕴含深意。

    公众号guangcity
  • n种解法破DFS与BFS

    0.说在前面1.二叉树的层次遍历I1.1 BFS非递归思路11.2 BFS非递归思路21.3 BFS双端队列1.4 BFS递归思路1.5 DFS递归思路2.二...

    公众号guangcity
  • 第二期编程实践之快乐数

    0.导语1.快乐数1.0 问题1.1 递归+哈希+循环1.2 非递归+哈希+循环1.3 循环替代1.4 哈希表替代1.5 数字4的作用2.作者的话

    公众号guangcity
  • Selenium+python自动化83-chrome手机wap模式

    一、前言 这里是群里(QQ群:226296743)风神出60大洋悬赏的问题,学会这篇就是赚了60大洋了! 我的环境: - chrome 62 - chrome...

    上海-悠悠
  • Selenium的PO模式(Page Object Model)[python版]

    首先,我们要分离测试对象(元素对象)和测试脚本(用例脚本),那么我们分别创建两个脚本文件, LoginPage.py 用于定义页面元素对象,每一个元素都封装成组...

    流柯
  • 对自动化测试的几点思考(三)

    在前面的两个文章中关于接口测试,自动化测试聊了很多,那今天就说下在自动化测试中的断言,在自动化测试中,没有断言的测试用例是无效的,这是我一直的想法...

    无涯WuYa
  • python 自定义优先级队列

    class PriorityQueue: def init(self): self._queue = [] self._index = 0

    用户5760343
  • python3–面向对象–类

    老七Linux
  • 面向对象:反射,双下方法

    反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应...

    changxin7
  • 图像处理: 超像素(superpixels)分割 SLIC算法

    超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术,是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。它利...

    Petrichor_

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动