文档章节

Python实现自动登录站点

blackfoxya
 blackfoxya
发布于 06/24 23:30
字数 1197
阅读 10
收藏 0
点赞 0
评论 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
粉丝 2
博文 46
码字总数 75172
作品 0
长沙
运维
十行Python代码能干什么?实现PC端微信自动回复功能,上班必备!

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

Python新世界
07/18
0
0
Python3.6实现12306火车票自动抢票,附源码

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

猫咪编程
06/05
0
0
Python selenium实现微博自动登录

(一)编程环境 操作系统:Win 10 编程语言:Python 3.6 (二)安装selenium 这里使用selenium实现。 如果没有安装过python的selenium库,则安装命令如下 (三)下载ChromeDriver 因为selen...

海天一树X
05/15
0
0
Python + Selenium 登录QQ邮箱

Python + Selenium 自动化登录QQ邮箱 准备工作 Windows或则Linux 安装Python 安装Selenium 安装Chrome Driver 环境选择Windows 10 安装Python Windows下安装 python 3.7.0 (因为python 2和p...

迷你芊宝宝
07/02
0
0
基于 Django 的手机管理系统

前段时间和小组一起完成数据库作业,觉得收获挺多的,分享到博客来。 一、概述 打算通过设计数据库,然后结合 Python 框架Django,实现在网页上对数据库的增删改查(本例以手机的管理为例,不...

希希里之海
07/01
0
0
Eclipse下搭建Python环境

PyDev for Eclipse 是一个功能强大且易用的 Eclipse Python IDE 插件。本文将向读者介绍 PyDev 开源项目及其安装配置方法,并在此基础上详细介绍如何利用 PyDev 插件把 Eclipse 变为功能强大...

方开金
2014/09/04
0
0
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记

Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量下载,学习过程中遇...

猜猜我是吧
2014/09/17
0
2
Python 用于网站抓取 登录 发布的模块介绍

由于目前的Web开发中AJAX、Javascript、CSS的大量使用,一些网站上的重要数据是由Ajax或Javascript动态生成的,并不能直接通过解析html页面内容就能获得(例如采用mechanize、lxml、Beautif...

shaohan
2014/03/20
0
0
PHP爬虫和基于命令行的Python爬虫有什么差别?

基于命令行的Python爬虫。。。就是说是命令行运行的,而不是通过浏览器运行的 然后这种Python爬虫和PHP爬虫什么差别呢? 是不是因为php爬虫本身基于浏览器,一旦你的浏览器已经登录了对方网站...

oreax
06/05
0
0
python 使用pexpect实现自动交互示例

Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块,它可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。 shell 命令expect使用 http://blog.51cto.com/superl...

super李导
05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
27分钟前
1
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
32分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
47分钟前
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
今天
0
0
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部