分享

Selenium简单实践,登录QQ邮箱和QQ空间

 heii2 2018-08-25

Selenium是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,python有selenium库可以专门用来操纵浏览器,下面我用火狐浏览器为例介绍代码登录邮箱和空间的过程。


环境配置


  • 首先安装selenium,在终端执行pipinstall selenium即可。

  • 然后安装火狐浏览器,如果本地有火狐浏览器即可忽略本操作。

  • 安装火狐驱动程序,Firefox的驱动geckodriver下载地址:

    https://github.com/mozilla/geckodriver/releases/

    下载解压后把geckodriver.exe(linux是geckodriver文件)发到Python的安装目录的Scripts文件夹里面就可以了。


注:不使用火狐浏览器也可以使用谷歌浏览器Chrome,下载安装Chrome,在 

http://chromedriver.storage./index.html

或者

http://npm./mirrors/chromedriver/

下载对应的webdriver,对应表如下



然后将chromedriver.exe文件放到python安装目录下的Scripts文件夹下即可


登录qq邮箱

from selenium import webdriver

driver=webdriver.Firefox()
driver.implicitly_wait(3) #设定隐式等待时间
driver.get('https://mail.qq.com/')

user='qq账号'
password='qq密码'

webdriver提供八种元素定位方法,如表


方法

解释

find_ element_ by_id()

 通过id定位

find_ element_ by_ name()

 通过name定位

find_ element by_ class_ name()

 通过class name定位

find_ element_ by_tag_ name()

通过标签名定位

find_ element_ by_link_text()

通过文本链接定位

find_ element_ by_ partial link_ text()

 通过文本链接的一部分定位

find_ element_ by_xpath()

通过绝对路径定位

find_ element_ by_ css_ selector()

 通过css选择器定位


我在这里发现xpath(绝对路径定位)比较方便,尤其是在使用工具的情况下,在火狐浏览器附加插件中,如图



搜索xpath,选择第一个插件




如图,点击图片看原图,这就是xpath的操作指南



这样,我们就可以避免看复杂的网页源代码查找相关元素了,尤其是在网页很复杂的情况下,合理使用xpath插件可以提高效率。

选择基本版后,网页变成这样


好了,继续补上代码,如下


driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/a[1]').click() #选择 基本版
driver.implicitly_wait(3)
driver.find_element_by_xpath('//*[@id='u']').clear()
driver.find_element_by_xpath('//*[@id='u']').send_keys(user)  #输入账号
driver.find_element_by_xpath('//*[@id='p']').clear()
driver.find_element_by_xpath('//*[@id='p']').send_keys(password) #输入密码
driver.find_element_by_xpath('//*[@id='go']').click()       #登录

程序运行结果如下动态图



登录QQ空间


在qq空间的登录界面,如图,我们发现,没有基本版这个选择捷径了,就只能在中间那选择二维码登录或者账号密码登录



使用xpath定位的时候发现无法定位,如图



但是别忘了,没法定位是有原因的,鼠标右键单击这发现其实这是一个框架,选择“查看框架源代码”,在地址栏下删除“view-source:” 回车,然后再用xpath重新定位,如图




代码如下:

from selenium import webdriver

driver=webdriver.Firefox()
driver.implicitly_wait(3)
driver.get('https://qzone.qq.com/')

user='qqzhanghao'
password='qqmima'

frame=driver.find_element_by_id('login_frame')
driver.switch_to.frame(frame)
driver.find_element_by_xpath('//*[@id='switcher_plogin']').click() #选择账号密码登录
driver.find_element_by_xpath('//*[@id='u']').clear()
driver.find_element_by_xpath('//*[@id='u']').send_keys(user)
driver.find_element_by_xpath('//*[@id='p']').clear()
driver.find_element_by_xpath('//*[@id='p']').send_keys(password)
driver.find_element_by_xpath('//*[@id='login_button']').click()

程序运行结果:



图中程序点击登陆的时候突然出现了网络繁忙之类的,我马上再点击一下补了一刀,哈哈哈,完美。

 

写在最后


  • 登录QQ空间和QQ邮箱的时候有可能要输验证码,但是一直叫输验证码肯定是异常情况,账号或者密码错误。

  • 使用自己经常使用的电脑一般不会输验证码,但是自动化登录频率多了会。

  • 其他浏览器在插件里输入xpath发现工具还挺多,当发现生成的绝对路径很长的时候多半也是对的

  • 当登录了QQ可以直接点击QQ头像的那个图标,使用自动化程序也是可以的,只是绝对路径需要换一个工具查找,因为使用xpath finder的时候点一下图标,路径没出现,但是……已经登录了。


我的困惑:


在登录QQ空间的时候我发现登录界面是在一个框架里面的,在查网页源代码的时候我惊讶的发现框架竟然是被注释掉了,如图:



那么问题是,这段被注释掉的代码是如何执行的呢?我是非常非常非常的惊讶,恳请大佬们回答,解决我目前最大的困惑。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约