python实现从登录到自动发送qq邮件,供大家参考,具体内容如下
qq邮箱登录注意问题
账户密码登录框是写在一个iframe上的,所以我们要先进入iframe中才能定位到下面的两个输入框和登录按钮。从下图我们可以看到iframe=login_frame,我们可以是用driver.switch.to_frame(“login_frame”)进入iframe中。接下来的两个输入框和登录按钮都有id属性,我们只需要用driver.find_element_by_id(“xxx”)就可以定位到元素。
记得退出iframe,不然定位后面的所有元素都会失败(切记),退出iframe的话我们可以写driver.switch_to_default_content()来实现(个人发现to后面用“.”还是“_”符号,都可以将后面显示出来)。大家可以尝试下,把这句话省略,接着定位下面的元素。
主页面注意事项
主页面上左上角的“写信”按钮,你右击是不会显示查看元素的,第一种方法,我们首先在页面其他地方右击,接着选中查看元素,然后用查看器左边的那个鼠标按钮去点击“写信”按钮。就可以查看到。第二种方法,直接根据“写信”两个字去定位元素。我们可以这样driver.find_element_by_link_text(“写信”)
写信页面注意事项
写信页面都写在iframe里面,所以要进入iframe中,然后定位收件人的输入框,我们可以从下面的页面代码中看到class的值有很多地方都用到(不是唯一),所有我们相对路径的方法,driver.find_element_by_xpath("//*[@id=“toareactrl”]//div[2]/input")。这样就可以解决了。
文下面的文本框注意四点,第一点,文本框在一个iframe中;第二点,文本框没有任何的属性值,所以我们可以使用html标签名定位,driver.find_element_by_tag_name(“body”);第三点文本框需要先点击(click),在编写(send_keys),如果没有先点击在编写,那么你send_keys(“xxxx”)内容会放在主题后面的文本框中。第四点,退出iframe,然后再进入iframe=“mainframe”,因为退出的话就是所有的iframe都退出。
完整脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
import unittest,time,traceback from selenium.common.exceptions import timeoutexception,nosuchelementexception class testdemo(unittest.testcase): def setup( self ): self .driver = webdriver.firefox(executable_path = 'f:\\geckodriver' ) def test_sendqqemail( self ): try : url = 'https://mail.qq.com/' self .driver.get(url) self .driver.maximize_window() self .driver.switch_to_frame( "login_frame" ) self .driver.find_element_by_id( "u" ).send_keys( "用户名" ) self .driver.find_element_by_id( "p" ).send_keys( "密码" ) self .driver.find_element_by_id( "login_button" ).click() time.sleep( 5 ) self .driver.switch_to.default_content() #退出iframe,如果没这句话后面的元素定位都会出错 self .driver.find_element_by_id( 'composebtn' ).click() #写信模块都在iframe=mainframe页面上 self .driver.switch_to_frame( "mainframe" ) time.sleep( 3 ) self .driver.find_element_by_xpath( "//*[@id='toareactrl']/div[2]/input" ).send_keys( "收件人" ) #定位主题 self .driver.find_element_by_xpath( '//input[@id="subject"]' ).send_keys( "主题" ) #正文编写iframe中 self .driver.switch_to_frame( self .driver.find_element_by_class_name( "qmeditorifrmeditarea" )) #self.driver.find_element_by_xpath("/html/body").send_keys('你好,再见') #定位正文 content = self .driver.find_element_by_tag_name( "body" ) #必须click(),不然会写到主题里面 content.click() content.send_keys( "正文内容" ) time.sleep( 3 ) self .driver.switch_to.default_content() self .driver.switch_to_frame( "mainframe" ) #定位发送按钮 self .driver.find_element_by_xpath( '//a[.="发送"]' ).click() except timeoutexception: print ( "显示等待页面元素超时" ) except nosuchelementexception: print ( "寻找页面元素不存在" ,traceback.print_exc()) except exception: print (traceback.print_exc()) def teardown( self ): self .driver.quit() if __name__ = = "__main__" : unittest.main() |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_43992799/article/details/86082389