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

Python3.6+selenium+xlwt爬取邮箱内容下载到Excel

需求:需要将邮箱收件箱里面的所有邮件的内容特定copy下来,再通过特定规则整理到一个Excel表格里面。
采用:Python3.6+selenium+xlwt

之前没有用过selenium先了解一下selenium

什么是selenium?

selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

selenium的中文官方文档网址: https://selenium-python-zh.readthedocs.io/en/latest/locating-elements.html

用到了Chrome插件,具体Chrome插件再Windows系统和Mac系统中的安装参考:

https://blog.csdn.net/zhangvalue/article/details/102847649   Mac系统的安装放置位置

https://blog.csdn.net/zhangvalue/article/details/102851129    Windows系统中的安装

具体代码如下:

# *===================================*
# -*- coding: utf-8 -*-
# * Time : 2019/10/31 15:12
# * Author : zhangsf
# *===================================*
import time
import xlwt
from selenium import webdriver

options = webdriver.ChromeOptions()
# options.add_argument("user-data-dir=selenium")
chrome = webdriver.Chrome(options=options)
url = 'https://xxxxx/'
print("-----------------------------Chrome启动--------------------------------")
chrome.get(url)
time.sleep(3)
# 登录
chrome.find_element_by_xpath('//*[@id="xxxxx"]')
chrome.find_element_by_name("username").clear()
chrome.find_element_by_name("username").send_keys('username')
chrome.find_element_by_name("password").clear()
chrome.find_element_by_name("password").send_keys("password")
chrome.find_element_by_id("btnEnter").click()
print("-----------------------------finish login-----------------------------")
print(" 获取邮件列表")
title = []
user  = []
time  = []
elements=chrome.find_elements_by_class_name("xxxxx")
sent_elements=chrome.find_elements_by_class_name("xxxxx")
time_elements=chrome.find_elements_by_class_name("xxxxx")
count=0
for e,e_user,e_time in zip(elements,sent_elements,time_elements):
    print("发件人:"+e_user.text+"    "+"------邮件标题: "+e.text +"-----发件时间"+e_time.text)
    title.append(e.text)
    user.append(e_user.text)
    time.append(e_time.text)
    count=count+1
print("一共获取的邮件数量"+str(count))
print("开始构建Excel表格")
myxls = xlwt.Workbook()
sheet1 = myxls.add_sheet(u'sheet1', cell_overwrite_ok=True)
#先初始化Excel表格的表头的内容
sheet1.write(0, 0, "编号")
sheet1.write(0, 1, "发件人")
sheet1.write(0, 2, "主题")
sheet1.write(0, 3, "发件时间")
for i in range(0, len(title)):
    sheet1.write(i+1, 0, i + 1)
    sheet1.write(i+1, 1, user[i])
    sheet1.write(i+1, 2, title[i])
    sheet1.write(i+1, 3, time[i])
myxls.save('E:\\python_file\\web_spider\\demo.xls')
print("结果统计完成!!!")

相关文章:

  • python3 Manager 安装不成功
  • JQuery中 Uncaught ReferenceError: $ is not defined
  • Python中unittest.main(verbosity=2)
  • Windows net start mysql 服务名无效
  • pymysql.err.InternalError: (1364, Field 'id' doesn't have a default value)
  • selenium.common.exceptions.WebDriverException: Message: unknown error: unknown sessionId
  • selenium模拟页面下滑到底部
  • selenium在定位元素的时候报错:'WebElement' object does not support indexing
  • Message: stale element reference: element is not attached to the page document
  • mysqlclient 1.3.13 or newer is required; you have 0.9.3.
  • Invalid HTTP_HOST header: '127.0.0.1:8003'. You may need to add '127.0.0.1' to ALLOWED_HOSTS.
  • 使用postman模拟登陆post请求
  • 证明:含有n个结点的二叉链表中共有n+1个空链域
  • Python3出现InsecureRequestWarning
  • TypeError: expected string or bytes-like object
  • Create React App 使用
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Mithril.js 入门介绍
  • nfs客户端进程变D,延伸linux的lock
  • Object.assign方法不能实现深复制
  • php的插入排序,通过双层for循环
  • swift基础之_对象 实例方法 对象方法。
  • Web Storage相关
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 入门级的git使用指北
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 整理一些计算机基础知识!
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​渐进式Web应用PWA的未来
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • **python多态
  • .Net Redis的秒杀Dome和异步执行
  • .NET 设计模式初探
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET上SQLite的连接
  • .NET序列化 serializable,反序列化
  • .NET中GET与SET的用法
  • //解决validator验证插件多个name相同只验证第一的问题
  • @我的前任是个极品 微博分析
  • [20161101]rman备份与数据文件变化7.txt
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [BUG]vscode插件live server无法自动打开浏览器