作者:日月小明空间_785 | 来源:互联网 | 2023-05-17 12:44
Selenium是常见的UI自动化工具,利用Selenium可以实现很多常用的网页操作。Selenium2相比于Selenium1,核心的升级在于引入了Webdriver。在使用Webdr
Selenium是常见的UI自动化工具,利用Selenium可以实现很多常用的网页操作。Selenium2相比于Selenium1,核心的升级在于引入了Webdriver。在使用Webdriver之前,Selenium主要是在浏览器中运行Javascript来实现自动化的操作,由于Javascript的安全模型等因素的限制,有一定的局限性。Webdriver不再依赖于Javascript,它通过原生浏览器支持或者浏览器扩展直接控制浏览器。它的工作原理大致如下:
首先,Webdriver启动浏览器并绑定端口,该启动浏览器作为Webdriver的remote server。然后客户端通过The Webdriver Wire Protocol给remote server的监听端口发送请求。Remote server 收到请求后,使用原生的浏览器组件(如:IEDriverServer.exe、Chromedriver.exe等),将请求转化浏览器的本地调用。下面介绍使用Selenium2来实现登录CSDN网站的过程。
#coding=utf-8
from selenium import webdriver
driver=webdriver.Firefox() #启动Firefox浏览器实例
driver.get("https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn") #访问CSDN登陆页
driver.find_element_by_id("username").clear() #清除用户名输入框中的内容
driver.find_element_by_id("username").send_keys("yourusername") #输入用户名
driver.find_element_by_id("password").clear() #清除密码输入框中的内容
driver.find_element_by_id("password").send_keys("yourpassword") #输入密码
driver.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div/div[1]/div/form/input[6]").click() #点击登录按钮
#登录完成后,获取网页的title,通过检查title来验证是否登录成功
title=driver.title
print title
if title==u"我的CSDN":
print u"登录成功"
#获取页面中的用户名
user=driver.find_element_by_xpath("/html/body/div[6]/div[2]/div[1]/div[1]/div[2]/div[1]/span/a").text
print user
else:
print u"登录失败"
这里对于以上代码做一些说明。
1. 第一行的#coding=utf-8建议加上,因为Python对于编码的处理比较容易出问题,特别是有中文的时候,应该统一指定编码格式。
2. webdriver定位网页元素的方式比较多,可以根据id, name, tag, xpath, css等。使用id, name, tag这些方式定位元素比较简单和方便,缺陷是这些属性不一定存在,另一方面,它们也不具备唯一性。 利用xpath定位,可以深入网页的层次结构,更加准确,但是维护比较麻烦,不同的浏览器也可能存在差异。不熟悉Xpath的同学,可以利用Firebug查看组件的xpath路径。对于组件的定位,笔者的建议是,能使用id或者name等简单方式确定的元素就用这类方式确定;层次结构复杂,属性不全的元素,可以通过xpath或者css等方式确定。
3. 完成登录后,需要对是否登录成功进行检查,一般可以通过以下几种方式:
1) 检查当前页面的title是否正确
2)检查当前页面的url是否正确
3)检查当前页面中的某些元素是否正确,例如,登录成功后应该显示的用户名,模块名等等。
这里采用了检查title和用户名的方式。