Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门
https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6EmUbbW&id=564564604865
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 26 09:01:45 2016@author: Administrator
"""from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time#模拟登陆163邮箱
driver = webdriver.Firefox()
driver.get("http://mail.163.com/")#用户名 密码
elem_user = driver.find_element_by_name("username")
elem_user.send_keys("lily127811")
elem_pwd = driver.find_element_by_name("password")
elem_pwd.send_keys("19770807")
#登录
elem_pwd.send_keys(Keys.RETURN)
time.sleep(5)
#此语句中断浏览器关闭
assert "baidu" in driver.title
driver.close()
driver.quit()
希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~
[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/")#用户名 密码 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浏览器并输入用户名和密码实现邮箱登录。
同时输入用户名或密码错误会提示,其实就是浏览器。
原理解释
两年前在学习C#网络编程时,我成写过Winform自动访问163邮箱的文章:
C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
通过对比,Python简短高效的优势就显示出来的,其中163邮箱登录界面HTML源码也没有修改和修复过,这是我意料之外的。
其中通过查找该登录页面发现用户名Id为“idInput”,密码Id为“pwdInput”,登录按钮ID为“loginBtn”。如图id和name:
<input class="" tabindex="1" title="请输入帐号" id="idInput" name="username" type="text" value=""..
<input class="" tabindex="2" title="请输入密码" id="pwdInput" name="password" type="password" />
<button id="loginBtn" class="" type="submit">登 录</button>
如下图所示一目了然:
同样下面这段代码可实现自动登录CSDN,是不是可以通过它实现暴力破解密码呢?
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"按钮之前会给出"Login"登录按钮:
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"按钮元素的方法如下:
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
<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/)
Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍相关推荐
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- [Python爬虫] Selenium实现自己主动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现訪问Firefox浏览器并自己主动搜索"Eastmount"keyword及截图的功能.而这篇文章主要简介怎样实现 ...
- Python+Selenium实现自动登录163邮箱导出邮件可按时间和内容进行筛选
文章目录 描述 一.打码平台 二.实现方法 1. 过点选验证 2. 全部代码 总结 备注 描述 此脚本可以实现网易163邮箱的自动登录,自动过点选验证,按时间和关键字筛选内容,最后导出邮件 一.打码平 ...
- python爬虫入门—selenuim自动登录qq邮箱
from selenium import webdriverdriver = webdriver.Chrome()# 进入qq邮箱主页面 driver.get('https://mail.qq.com ...
- 用Python+Selenium来测试登录自动登录163邮箱
用Python+Selenium来测试登录自动登录163邮箱 1 准备条件 2 程序说明 3 代码 1 准备条件 ① windows系统(也许你是Linux,Mac,自行选择) ②安装了Anacond ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- 使用Autoit3 自动登录163邮箱
最近在研究自动化脚本语言Autoit,根据在网上找的资料测试可以使用的登录163邮箱代码,跟大家分享,我还在研究如何能够自动发送邮件: 有会自动发邮件的大神麻烦告诉我一声,可以把代码发我邮箱yusha ...
- python+selenium自动登录163邮箱代码提示错误解决方案(如:NoSuchFrameException: Message: no such frame)
selenium模块实现163邮箱自动登录操作 利用selenium模块控制Chrome浏览器打开163邮箱网页,并实现自动填写账号密码操作. 在Python中利用selenium模块实现这一目的只需 ...
- python自动注册邮箱_[转][Python][自动登录163邮箱]
#-*- coding:UTF-8 -*- import urllib,urllib2,cookielib import xml.etree.ElementTree as etree #xml解析类 ...
最新文章
- CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)
- CSS中的超链接和超链接分类
- FreeBSD 8.0 终于发布正式版了
- Vista下的程序集缓存卸载方法,也就是C:\Windows\assembly之下的卸载方法
- “骗子”成民企院士第一人:把认真当信仰,人生就会开挂
- 【luogu4408】 [NOI2003]逃学的小孩 [动态规划 树的直径]
- 13凯越门锁继电器在哪里_汽车中控保险丝在哪里_汽车一年保险费_保险频道
- HTTP response codes
- 视频基本术语介绍 码流、帧率、分辨率、I帧、带宽
- 把opencv Mat 按位存成bmp二值图像 (1bit 1pixel)(位深度为1)
- 诺基亚3d贪吃蛇java版_3D贪吃蛇诺基亚六边形
- 一篇非大厂的 Android 面试总结心得~
- 一文详解泊车感知的摄像头需求
- 最全的Android开源项目集合(转)你想实现的我都有!
- 《windows 程序设计》中的翻译错误----学习笔记
- 在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像
- oracle roadrunner,Dreamweaver CS3 For ASP 数据库连接
- 12个最佳WordPress预订和保留插件
- 错误代码:0x800F081f
- xcode cocos2d-x js lus 脚本更新代码
热门文章
- 抽象类和接口的小程序
- php查题,2020高校邦《PHP语言程序设计》答案在线查题
- python上海交通大学赵璐_上海交通大学
- Linux的任督二脉之内存管理线上微信群直播报名(2018.1.29-2.2)
- 移动端h5调起高德地图、百度地图实现路线及路况查询
- 初级调色转档CameraRaw
- unity使用Sprite Editor图片切割功能减少性能损耗
- 名片识别信息分类python_基于Python的智能名片识别接口调用代码实例
- 一文详尽混淆矩阵、准确率、精确率、召回率、F1值、P-R 曲线、ROC 曲线、AUC 值、Micro-F1 和 Macro-F1
- 无为电缆工业学校计算机,芜湖电缆工业学校(无为县职教中心)2020年宿舍条件怎么样?...