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

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