Mayi_使用selenium自动登录126/163邮箱并发送邮件

转自: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( '[email protected]' )<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> #发送

猜你喜欢

转载自www.cnblogs.com/xinxin1994/p/8999418.html