前三篇文章介绍了安装过程和通过Selenium实现訪问Firefox浏览器并自己主动搜索"Eastmount"keyword及截图的功能。而这篇文章主要简介怎样实现自己主动登录163邮箱,同一时候继续介绍Selenium+Python官网Locating Elements部分内容。

希望该篇基础性文章对你有所帮助。假设有错误或不足之处,请海涵~

[Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
        [Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium
        [Python爬虫] Selenium自己主动訪问Firefox和Chrome并实现搜索截图
        注意:好像訪问浏览器在C盘会自己主动生成文件越来越小,但能够清理,不知道为啥?

一. Selenium自己主动登录

代码例如以下所看到的:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time#模拟登陆163邮箱
driver = webdriver.Firefox()
driver.get("http://mail.163.com/")#username password
elem_user = driver.find_element_by_name("username")
elem_user.send_keys("15201615157")
elem_pwd = driver.find_element_by_name("password")
elem_pwd.send_keys("********")
elem_pwd.send_keys(Keys.RETURN)
time.sleep(5)
assert "baidu" in driver.title
driver.close()
driver.quit()

执行结果例如以下图所看到的,自己主动打开Firefox浏览器并输入username和password实现邮箱登录。

        代码非常easy。当中的原理也非常easy:通过driver訪问Firefox浏览器及URL,同一时候find_element_by_name找到网页HTML源码中相应的值并填充,最后调用Keys实现模拟操作键盘Keys.RETURN实现。

该断言结果是不存在的,主要是用于防止关闭浏览器。

同一时候输入username或password错误会提示,事实上就是浏览器。

原理解释 
        两年前在学习C#网络编程时,我成写过Winform自己主动訪问163邮箱的文章:
        C# 网络编程之网页自己主动登录 (一).使用WebBrower控件模仿登录
        通过对照。Python简短高效的优势就显示出来的,当中163邮箱登录界面HTML源代码也没有改动和修复过,这是我意料之外的。
        当中通过查找该登录页面发现usernameId为“idInput”,passwordId为“pwdInput”,登录buttonID为“loginBtn”。如图id和name:
          <input class="" tabindex="1" title="请输入帐号" id="idInput" name="username" type="text" value=""..
          <input class="" tabindex="2" title="请输入password" id="pwdInput" name="password" type="password" />
          <button id="loginBtn" class="" type="submit">登  录</button>
        例如以下图所看到的一目了然:

        这部分文章尽管简单,可是作为基础文章在合适只是了,同一时候通过webdriver的driver.find_element_by_name引出以下的基础知识介绍,毕竟实践样例才是学习Selenium的动力源泉。


        相同以下这段代码可实现自己主动登录CSDN,是不是能够通过它实现暴力破解password呢?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import timedriver = webdriver.Firefox()
driver.get("https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn")
elem_user = driver.find_element_by_name("username")
elem_user.send_keys("Eastmount")
elem_pwd = driver.find_element_by_name("password")
elem_pwd.send_keys("********")
elem_pwd.send_keys(Keys.RETURN)
time.sleep(5)
assert "baidu" in driver.title
driver.close()
driver.quit()

二. Locating Elements介绍

PS:第一次上传翻译博文。假设有错误还请见谅!
        官网地址:http://selenium-python.readthedocs.org/locating-elements.html
        这里有各种策略用于定位网页中的元素(locate elements)。你能够选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素:

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector

以下是查找多个元素(这些方法将返回一个列表):

  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

除了上面给出的公共方法,这里也有两个在页面对象定位器实用的私有方法。

这两个私有方法是find_element和find_elements。使用方法演示样例:

from selenium.webdriver.common.by import Bydriver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

这些都是通过类可获取的属性:

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

1 Locating By Id

当你知道一个元素的id属性时使用该功能。

有了这种方法,用id属性值匹配时第一个被定位的元素将被返回。假设没有元素匹配id值,一个NoSuchElementException异常将会抛出。比如,參考这个页面源代码:

<html><body><form id="loginForm"><input name="username" type="text" /><input name="password" type="password" /><input name="continue" type="submit" value="Login" /></form></body>
<html>

表单form元素能够被例如以下方式定位:

login_form = driver.find_element_by_id('loginForm')

2 Locating By Name

当你知道一个元素的name属性时使用该方法。通过该方法。第一个满足name属性值的元素将被匹配返回,假设没有元素匹配,将抛出一个NoSuchElementException异常。比如。參考以下源代码:

<html><body><form id="loginForm"><input name="username" type="text" /><input name="password" type="password" /><input name="continue" type="submit" value="Login" /><input name="continue" type="button" value="Clear" /></form>
</body>
<html>

定位username&password元素方法例如以下:

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')

在"Clear"button之前会给出"Login"登录button:

continue = driver.find_element_by_name('continue')

3 Locating By XPath

XPath是用于定位XML文档中节点的语言。

正如HTML能够是XML(XHTML)的一个实现。Selenium用户能够利用这个强大的语言来跟踪Web应用程序中的元素。XPath扩展已经超出(以及支持)了依照id或name属性定位的简单方法,并开发了各种新的可能,如定位页面上的第三个复选框(checkbox)。

当中使用XPath的一个主要原因是:当你没有一个合适的ID或Name属性来定位你须要查找的元素时,你能够使用XPath去定位这个绝对元素(不建议这样),或者相对一个有id或name属性的元素定位。XPath定位器也能够通过其它不止是id和name属性进行指定元素。
        绝对XPath包括定位的全部元素。这些元素从根(HTML)到其结果可能会失败,仅仅有略微调整到应用程序。通过找到附近的一个元素的id或name属性(理想的父元素)。你才干够依据之间的关系定位到你追踪的元素。这是不太可能改变的,而且会使你的測试更加的健壮。比如參考以下这段源码:

<html><body><form id="loginForm"><input name="username" type="text" /><input name="password" type="password" /><input name="continue" type="submit" value="Login" /><input name="continue" type="button" value="Clear" /></form>
</body>
<html>

这个表单form元素可能通过例如以下方法被定位:

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

[1] 绝对路径(假设HTML有略微的修改,就会被破坏)
        [2] 在HTML中的第一个表单元素
        [3] 指定属性名称为id且值为loginForm的表单元素
        定位username元素的方法例如以下:

username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")

[1] 第一个form元素通过一个input子元素。name属性和值为username实现
        [2] 通过id=loginForm值的form元素找到第一个input子元素
        [3] 属性名为name且值为username的第一个input元素
         定位"Clear"button元素的方法例如以下:

clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")

[1] 属性名为name其值为continue和属性名为type其值为button的Input控件
        [2] 属性id=loginForm的form元素的第四个input子元素
        上面这些样例涉及一些基础知识,很多其它详情请參考以下的建议:

  • W3Schools XPath Tutorial
  • W3C XPath Recommendation
  • XPath Tutorial - with interactive examples.

这里也有几个很有用的附加组件。能够帮助发现元素的XPath:

  • XPath Checker - suggests XPath and can be used to test XPath results.
  • Firebug - XPath suggestions are just one of the many powerful features of this very useful add-on.
  • XPath Helper - for Google Chrome

4 Locating Hyperlinks By Link Text


        当你知道一个锚标记内使用链接文本就使用该方法。通过这个策略。第一个匹配这个link text值的元素将被返回。假设没有元素匹配这个链接文本,将抛出一个NoSuchElementException异常。演示样例的源码例如以下:

<html><body><p>Are you sure you want to do this?

</p> <a href="continue.html">Continue</a> <a href="cancel.html">Cancel</a> </body> <html>

这个continue.html链接定位的方法例如以下,partial表示部分匹配:

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

5 Locating Elements By Tag Name

当你想通过tag name(标记名)定位一个元素时能够使用该方法。相同,第一个给出的tag name元素将被返回。假设没有匹配的标记名,将抛出一个NoSuchElementException异常。演示样例的源码例如以下:

<html><body><h1>Welcome</h1><p>Site content goes here.</p>
</body>
<html>

定位heading(h1)元素的方法例如以下:

heading1 = driver.find_element_by_tag_name('h1')

6 Locating Elements By Class Name

        介绍类似。用于通过类属性名(class attribute name)进行定位一个元素。演示样例源码例如以下:

<html><body><p class="content">Site content goes here.</p>
</body>
<html>

当中元素"p"的定位方法例如以下:

content = driver.find_element_by_class_name('content')

7 Locating Elements By CSS Selectors


        当你想要通过CSS选择器语法定位一个元素时。能够使用该方法。它将返回第一个与CSS选择器匹配的元素。假设没有匹配CSS选择器的元素,将返回一个NoSuchElementException异常。实例源码例如以下所看到的:

<html><body><p class="content">Site content goes here.</p>
</body>
<html>

当中元素"p"的定位方法例如以下:

content = driver.find_element_by_css_selector('p.content')

Sauce实验室有很好的关于CSS选择器的文档:
           Sauce Labs has good documentation on CSS selectors.

(By:Eastmount 2015-8-21 下午6点   http://blog.csdn.net/eastmount/)

转载于:https://www.cnblogs.com/ljbguanli/p/7270033.html

[Python爬虫] Selenium实现自己主动登录163邮箱和Locating Elements介绍相关推荐

  1. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  2. Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  3. Python爬虫——selenium模拟京东网站登录(一)

    1.导入需要的库 import time from selenium import webdriver 2.浏览器获取驱动 需要下载跟chrome浏览器相匹配的驱动driverchrome.exe,详 ...

  4. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  5. Python爬虫 - Selenium(4)配置启动项参数

    前言:本章将详细介绍Selenium启动项参数的配置,其中包括无界面模式(在服务器上运行不设置此项会报错).浏览器窗口大小设置.浏览器User-Agent (请求头)等等. 目录 一.常用参数 二.代 ...

  6. python模拟qq空间登录_python selenium模拟登录163邮箱和QQ空间

    最近在看python网络爬虫,于是我想自己写一个邮箱和QQ空间的自动登录的小程序, 下面以登录163邮箱和QQ空间和为例: 了解到在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用, ...

  7. python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容

    python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容 1.前言 前面在 python3爬虫系列20之反爬需要登录的网站三种处理方式中介绍的第三种方法,使用自动化测试工具s ...

  8. 用Python+Selenium来测试登录自动登录163邮箱

    用Python+Selenium来测试登录自动登录163邮箱 1 准备条件 2 程序说明 3 代码 1 准备条件 ① windows系统(也许你是Linux,Mac,自行选择) ②安装了Anacond ...

  9. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

最新文章

  1. linux dm-0 dm-1 设备映射 简介
  2. ExtJS4.x 开发环境搭建
  3. 现代密码学1.3--古典密码/historical cipher
  4. 科学计算机js代码,JavaScript实现科学计算器
  5. C# 使用 ValueTasks
  6. 如何掌握C#的核心技术
  7. Oracle 游标使用大全2
  8. Java经典实例:处理单个字符串
  9. CoreMotion(加速计)
  10. Linux学习笔记(4)
  11. 聚来宝获商务部《媒体购物国家标准》制订单位 【2012-12-22 17:04:20】【来源:京华网】【字体:大 中 小】【颜色:红 绿 蓝 黑】【分享新闻】
  12. Android应用源码英语四级单选助手答题类app源码下载
  13. 中国做图像处理的公司
  14. QPainter绘图
  15. Linux pthread详解
  16. 仿射变换(Affine Transformation)原理及应用(1)
  17. TFBGA240+25封装尺寸图
  18. 配置Python开发环境
  19. OSS服务和自建服务器存储对比
  20. 整型int数据的取值范围是怎么来的?

热门文章

  1. iphonex时间显示蓝色_一文了解显示技术的发展简史
  2. 基本linux性能调优技巧
  3. 【Linux】Linux进程的创建与管理
  4. 老板们这些股权结构需要优化了
  5. 从游戏中学习产品设计2:消费篇
  6. Android ViewGroup介绍+实例,大厂架构师经验分享
  7. 计算机英语期末考,《计算机英语》期末考试试卷.doc
  8. python 中文转拼音
  9. 床长人工智能教程 - 神经网络是如何进行预测的?
  10. 硅谷的程序员, 入职第一天都在干什么?