Python实现自动登陆站点

若是咱们想要实现自动登陆,那么咱们就须要可以驱动浏览器(好比谷歌浏览器)来实现操做,ChromeDriver 恰好可以帮助咱们这一点(非谷歌浏览器的驱动有所不一样)。html

1、确认软件版本

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

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

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

2、初步访问网站

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

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 官网,随后浏览器关闭。bash

3、自动登陆网站

咱们会须要经过 XPath 查找元素,使用 XPath 的主要缘由之一就是当你想获取一个既没有 id 属性也没有 name 属性的元素时, 你能够经过 XPath 使用元素的绝对位置来获取他(这是不推荐的),或相对于有一个 id 或 name 属性的元素 (理论上的父元素)的来获取你想要的元素。XPath 定位器也能够经过非 id 和 name 属性查找元素。cookie

接着咱们找到京东的登陆界面,查看源代码,会发现若是想要实现帐号登陆京东,就必须找到源码中帐户登陆的惟一键,此处惟一为“clstag”值dom

绝对的 XPath 是全部元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就致使你的定位失败。 可是经过就近的包含 id 或者 name 属性的元素出发定位你的元素,这样相对关系就很靠谱, 由于这种位置关系不多改变,因此可使你的测试更增强大。ide

这里咱们经过查找超连接<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恶意删除工具...

相关文章
相关标签/搜索