文档章节

Python实现自动登录站点

blackfoxya
 blackfoxya
发布于 06/24 23:30
字数 1197
阅读 107
收藏 0

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。

一、确认软件版本

首先我们需要确认我们所使用的谷歌浏览器版本,这里测试的谷歌浏览器版本为(版本 67.0.3396.87(正式版本) (64 位)),点击设置—关于Chrome,则可以看到

我们进入 Chromedriver 的官网下载页面,可以看到最新的 2. 4 版本支持谷歌的 v66-68,下载并保存路径即可

这里我们下载 win 版本,解压后存放到路径 “E:\chromedriver.exe”。

二、初步访问网站

除了使用 Chromedriver作为驱动,我们想要访问网站,还需要用到 Selenium 模块,Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效。我们先来安装此模块

pip install selenium

接着我们实现的代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/6/24 20:45
# @Author  : zhouyuyao
# @File    : demon2.py
import os

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = "E:\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver  # 获取chromedriver可执行文件路径
# print(os.environ["webdriver.chrome.driver"])
driver = webdriver.Chrome(chromedriver)       # 声明浏览器对象
driver.get("http://www.python.org")           # 访问页面,用 get() 方法来请求一个网页,参数传入链接 URL 即可
time.sleep(10)                                # 停留10s
driver.quit()                                 # 关闭浏览器

运行之后我们便发现弹出了 Chrome 浏览器,自动访问了 Python 官网,随后浏览器关闭。

三、自动登录网站

我们会需要通过 XPath 查找元素,使用 XPath 的主要原因之一就是当你想获取一个既没有 id 属性也没有 name 属性的元素时, 你可以通过 XPath 使用元素的绝对位置来获取他(这是不推荐的),或相对于有一个 id 或 name 属性的元素 (理论上的父元素)的来获取你想要的元素。XPath 定位器也可以通过非 id 和 name 属性查找元素。

接着我们找到京东的登录界面,查看源代码,会发现如果想要实现账号登录京东,就必须找到源码中账户登录的唯一键,此处唯一为“clstag”值

绝对的 XPath 是所有元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就导致你的定位失败。 但是通过就近的包含 id 或者 name 属性的元素出发定位你的元素,这样相对关系就很靠谱, 因为这种位置关系很少改变,所以可以使你的测试更加强大。

这里我们通过查找超链接<a>的位置来定位账户登录

driver.find_elements_by_xpath('//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')[0].click()

然后我们在谷歌的调试模式中分别找到登录的 “账号“(loginname)、“密码“(nloginpwd) 以及 “登录” (loginsubmit)的 id 。

最后我们的实现代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/6/24 21:20
# @Author  : zhouyuyao
# @File    : demon3.py
import random
import time
import os
from selenium import webdriver

def randomSleep(minS, maxS):        # 定义随机停顿时间函数
    time.sleep((maxS-minS)*random.random() + minS)

url = 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F'
chromedriver = "E:\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)   # 声明浏览器对象
driver.get(url)    # 访问页面,用 get() 方法来请求一个网页,参数传入链接 URL
randomSleep(1, 3)

driver.find_elements_by_xpath('//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')[0].click()
# find_elements_by_xpath 通过XPath查找元素
randomSleep(1, 2)

driver.find_element_by_id('loginname').clear()
randomSleep(1, 3)

driver.find_element_by_id('loginname').send_keys("username")
randomSleep(1, 2)

driver.find_element_by_id('nloginpwd').send_keys("userpassword")
randomSleep(3, 5)

driver.find_element_by_id('loginsubmit').click()
randomSleep(5, 10)

print(driver.get_cookies())
driver.close()       # 关闭浏览器

运行之后程序打开了浏览器,自动输入账号密码并成功登录京东

之后退出浏览器,并拿到了cookies 打印了出来。

登录其他网站可以参照该操作流程,后续如有需求将进行更新。

 

 

参考资料

1. ChromeDriver的安装

2. Selenium的使用

3. OS.ENVIRON()详解

4. 通过XPath查找元素

5. 洞见 SELENIUM 自动化测试

6. 【error】selenium启动chrome时,弹出设置页面:Microsoft Windows恶意删除工具...

© 著作权归作者所有

共有 人打赏支持
blackfoxya
粉丝 4
博文 68
码字总数 92155
作品 0
长沙
运维
私信 提问
python接口测试之session&token的处理(1)

概述: 1.1 cookie 在做接口的自动化测试中,无法绕过cookie,某些时候我们需要处理,那么怎么处理?另外一个方面,什么是cookie? cookie它的工作机制是用户识别以及状态管理,网站为了管理...

小八路2222
前天
0
0
Python3.6实现12306火车票自动抢票,附源码

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理...

猫咪编程
06/05
0
0
十行Python代码能干什么?实现PC端微信自动回复功能,上班必备!

本文实例为大家分享了python实现微信自动回复的具体代码,供大家参考,具体内容如下: 人有三急,不想让一早上给你发送祝福的人心里一阵寒风,可以秒回复对方的话,试试下面的python程序可以...

Python新世界
07/18
0
0
python 实现 jumpserver 自动登录

现在很多团队都在使用 jumpserver(http://www.jumpserver.org/ )作为跳板机,管理服务器权限,一些对安全要求比较高的团队还会加上 Google authenticator (Google 身份验证器)。 但是安全...

anoty
10/29
0
0
[Python] Django框架入门

说明:Django框架入门   当前项目环境:python3.5、django-1.11   项目名:test1   应用名:booktest   命令可简写为:python manager.py xxx => ./manager.py xxx 准备:已经安装p...

蜗牛噢
08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一个案例彻底弄懂如何正确使用 mysql inndb 联合索引

摘要: 有一个业务是查询最新审核的5条数据 ```sql SELECT `id`, `title` FROM `th_content` WHERE `audit_time` < 1541984478 AND `status` = 'ONLINE' ORDER BY `audit_time` D. 原来链接 ......

阿里云官方博客
9分钟前
1
0
详解如何用爬虫采集视频播放量数据(以腾讯视频为例)

现代社会提到大数据大家都知道这是近几年才形成的对于数据相关的新名词,在1980年,著名未来学家阿尔文·托夫勒便在 《第三次浪潮》一书中,将大数据热情地赞颂为“第三次浪潮的 华彩乐章”...

技术阿飞
14分钟前
1
0
区块链时代的拜占庭容错:Tendermint(二)

原文题目:《Tendermint: Byzantine Fault Tolerance in the Age of Blockchains》 原文作者:Ethan Buchman 翻译:饶云坤 校对:傅晓波 本文为节选 以下为正文: 本章阐述Tendermint共识算法...

万向区块链
27分钟前
0
0
AS连接网易Mumu模拟器

1、安装模拟器 打开这个网址现在模拟器然后安装 http://mumu.163.com/ 2、安装完成后启动模拟器 3、进入模拟器安装目录 例如本机的安装目录:C:\Program Files (x86)\MuMu\emulator\nemu\vmo...

HGMrWang
34分钟前
9
0
设计要做到扩展性强还挺难的

概述 在日常开发中,有时候你的上司会跟你说,这个模块的设计扩展性要高。把这句话说出来很简单,但是要做到则非常难。导致难的其中一个因素是: 你不熟悉这个行业的业务的玩法 我举个例子来...

Sam哥哥聊技术
35分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部