自动化学习记录问题1

来源:互联网 发布:田园城市 知乎 编辑:程序博客网 时间:2024/05/23 00:00

       今天,学了一些基础的教程之后,我就迫不及待的想要自己做一个自动发送邮件的脚本。于是我选择了使用最多的QQ邮箱进行发送。

       期间进行了2天遇到了几个难点。1)进入到QQ邮箱登陆界面的时候,无法定位到账号、密码的登陆框,这让我很疑惑,根据所学的东西,明明是可以通过driver.find_element_by_id('u')来定位到账号输入框的,可是我试了几次之后都是提示无法找到。好家伙难道我学的是假的?于是我上网查,原来登陆框是在一个frame中的,需要先切换到frame才能进行的,通过学习加了一行代码:driver.switch_to.frame("login_frame") ,于是我成功登陆到了QQ邮箱。

      登陆进去之后很快又遇到了第二个问题,又是无法定位到写信按钮,同样的道理需要切换,于是通过百度加了一行切换的代码:driver.switch_to_default_content()。进入写信界面之后还是遇到无法定位到的问题,在填写收件人、主题和正文的时候都无法定位到,原因也是一样的因为写信界面 是在一个mainFrame中的,所以要先切换到mainFrame中,用了driver.switch_to.frame('mainFrame')这个,接下来的事情就好办了,就是定位的问题了。首先是找收件人框,说实话真的不好找,我试了直接用ID,用class_name等都还是找不到,后来只好百度,大神给出的答案是driver.find_element_by_xpath('//*[@id="toAreaCtrl"]/div[2]/input'),看了代码和定位元素之后我瞬间明白了,收件人框没有直接的ID,智能逐级找出。后面的主题和正文就相对好找一点了,分别是driver.find_element_by_xpath('//*[@id="subject"]')和driver.find_element_by_class_name('qmEditorIfrmEditArea'),最后再发送就OK了。

      经过QQ邮箱自动发送邮件的实例之后,让我对python+selenium自动化有了基本的认识和兴趣,其中重点就是定位元素和对网页代码的了解。以后多自己写一些实例,看别人的代码,自然就能做到熟能生巧了。下面贴上我初入自动化写的代码:

from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get('https://mail.qq.com/cgi-bin/loginpage')

time.sleep(3)
# 切换iframe  
driver.switch_to.frame("login_frame")  
#输入账号
driver.find_element_by_xpath('//input[@id="u"]').send_keys('xxxxxx')
#输入密码
time.sleep(3)
driver.find_element_by_xpath('//input[@id="p"]').send_keys('xxxxxx')
#点击登录
driver.find_element_by_id('login_button').click()
time.sleep(7)


#进行页面切换
driver.switch_to_default_content()

driver.find_element_by_link_text('写信').click()
time.sleep(5)
#切换到写信界面
driver.switch_to.frame('mainFrame')
#填写收件人
driver.find_element_by_xpath('//*[@id="toAreaCtrl"]/div[2]/input').send_keys('497051142@qq.com')
time.sleep(3)
#填写主题
driver.find_element_by_xpath('//*[@id="subject"]').send_keys('test web')
time.sleep(3)
#写入正文
o = driver.find_element_by_class_name('qmEditorIfrmEditArea')
o.send_keys('刘先生,你好,这时来自您的第一封自动化发送的邮件')
time.sleep(5)
#点击发送按钮
driver.find_element_by_link_text('发送').click()

print('邮件发送完成!')

原创粉丝点击