热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Selenium2Python实现网页登陆过程

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和用户名的方式。

    

    



推荐阅读
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
日月小明空间_785
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有