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

    

    



推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • MongoDB集群配置:副本集与分片详解
    本文详细介绍了如何在MongoDB中配置副本集(Replica Sets)和分片(Sharding),并提供了具体的步骤和命令,帮助读者理解并实现高可用性和水平扩展的MongoDB集群。 ... [详细]
  • 本文介绍如何在QT框架中使用QWebSocket和QTcpSocket实现SSL加密通信,涵盖单向认证设置。单向认证常见于Web通信场景,其中客户端验证服务端证书,而服务端不验证客户端证书。 ... [详细]
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社区 版权所有