转自:https://www.cnblogs.com/yin-tao/p/7244082.html

我使用的是python2.7.13+selenium

ps:几天之前,我曾多次尝试写这段代码,但是在点击写信的步骤时失败了,我想我的问题应该大致是这几点:

1.写信按钮不能直接定位到,同时它的父目录id是动态的,我当时使用xpath定位到了这个动态的id,所以失败是必然的,那么就需要我们继续寻找向上寻找父目录,即多层级的xpath(建议多使用xpath/css)成功率会更高,因为层级越少,那么出现重复的可能越大(比如126写信中的主题的class和搜索框的class是一样的,当然还有很多)

2.页面的加载未完全,导致元素未找到而出现错误,所以需要我用到显示和隐式等待

3.同时要及时清除浏览器中的缓存,因为垃圾过多会导致浏览器运行变慢甚至崩溃

好了,话有点多了,直接贴代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#coding:UTF-8
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
 
driver = webdriver.Chrome()
driver.implicitly_wait(30)<br>#隐式等待,不影响用例执行速度<br>#如果登录时出现了验证码,可以将等待时长设置更长(如60),手动点击完成验证,并点击登录(ps:自动验证码很难,我感觉这种类型的验证码是其中的Boss)
driver.get('http://mail.126.com/')
driver.switch_to_frame('x-URS-iframe')<br>#登录页面存在iframe
driver.find_element_by_name('email').clear()
driver.find_element_by_name('email').send_keys('testingwtb')
driver.find_element_by_name('password').send_keys('a123456', Keys.ENTER)
time.sleep(6)<br>#跳转页面时,强制等待6s
driver.find_element_by_xpath("//div[@id='dvNavTop']/ul/li[2]/span[2]").click()<br>#点击写信按钮
time.sleep(2)
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('780720038@qq.com')<br>#收件人
driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']").send_keys(u'测试')<br>#主题
xpath = driver.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe")
driver.switch_to_frame(xpath)<br>#文本内容在iframe中
driver.find_element_by_xpath("//body[@class='nui-scroll' and @contenteditable='true']").send_keys(u'这是一个自动化测试邮件')
driver.switch_to_default_content()<br>#发送按钮在iframe外,所以需要跳出
driver.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()<br>#发送

MY_使用selenium自动登录126/163邮箱并发送邮件的更多相关文章

  1. python selenium 多账户自动登入163邮箱

    pycharm一些快捷键: ' ctrl ' +' / ' :注释 ' Tab ' :同时缩进 ' shift ' +' Tab ' :左移 一次缩进 本文webinfo.txt路径:C:\Pytho ...

  2. 自动化测试: Selenium 自动登录授权,再 Requests 请求内容

    Selenium 自动登录网站.截图及 Requests 抓取登录后的网页内容.一起了解下吧. Selenium: 支持 Web 浏览器自动化的一系列工具和库的综合项目. Requests: 唯一的一 ...

  3. selenium数据驱动模式实现163邮箱的登录及添加联系人自动化操作

    项目结构如下: 要求python3.0 selenium3.0 下面是代码: appModubles:addContactPersonActtion.py和LoginAction.py addCont ...

  4. Python+selenium自动循环扔QQ邮箱漂流瓶

    Python代码如下: # coding=utf-8 from selenium import webdriver from time import sleep from random import ...

  5. python登录网易163邮箱,爬取邮件

    from common import MyRequests,LoggerUntil,handle_exception myRequests.update_headers({ 'Accept':'tex ...

  6. HttpClient+jsoup登录+解析 163邮箱

    找了几个,只有这个靠谱,用的是httpclient4,另外还需要commons-lang和jsoup包 http://jsoup.org/ http://www.oschina.net/code/sn ...

  7. phpmailer使用qq邮箱、163邮箱成功发送邮件实例代码

    以前使用qq邮箱.163服务器发送邮件,帐号直接使用密码,现在不行了,得使用授权码,简单记录下 1.首先开通POP3/SMTP服务,qq邮箱——帐号——设置,找到POP3/SMTP点开启,输入短信会有 ...

  8. 163邮箱 SMTP发送邮件注意点

    在之前163邮箱注册的时候默认开通SMTP服务的,之后需要自己手动开始. 在配置的时候服务器的地址固定 用户名称就是你的邮箱 密码需要注意的是有的是你邮箱的密码,如果不对需要填写你的授权码!

  9. python webdriver 显示等待-自动登录126邮箱,添加联系人

    脚本内容:#encoding=utf-8#author-夏晓旭from selenium import webdriverimport timefrom selenium.webdriver.supp ...

随机推荐

  1. Binlog中最容易踩到的坑

    MySQL高可用架构中,主库复制是非常常见的一种. 当主库宕机后,可以提升一个从库作为新的主库,保证服务可用性:同时可以通过扩展从库,提高整个集群的QPS. 在主从复制架构下,MySQL通过binlo ...

  2. zabbix 通过自定义key完成网卡监控

    创建执行脚本: # cat /etc/zabbix/monitor_scripts/network.sh #!/bin/bash #set -x usage() { echo "Useage ...

  3. G1 Garbage Collector and Shenandoah

    http://www.diva-portal.se/smash/get/diva2:754515/FULLTEXT01.pdf https://is.muni.cz/th/ifz8g/GarbageC ...

  4. spark-architecture

    https://0x0fff.com/spark-architecture-shuffle/ https://0x0fff.com/spark-memory-management/ https://0 ...

  5. 每日英语:Apple Unveils New iPads

    Apple Inc. 's answer to the increasingly cutthroat tablet-computer market: more product choices and ...

  6. 碰撞器与触发器[Unity]

    请看原帖,移步:Unity3d碰撞检测中碰撞器与触发器的区别 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加 ...

  7. node的http请求

    //node的http服务 'use strict' var http = require('http') var server = http.createServer(function (reque ...

  8. MATLAB中-27开3次方得不到-3的原因

    原代码: y=@(x) x.^(/); 运行结果: >> y(-27) ans = 1.5000 + 2.5981i 原因: 用(-8)^(1/3)时,matlab其实是调用C = pow ...

  9. 【论文笔记】多任务学习(Multi-Task Learning)

    1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...

  10. RFC 4627 JSON

    Network Working Group D. Crockford Request for Comments: 4627 JSON.org Category: Informational July ...