目录

requests模拟登陆

Selenium自动化测试登陆


环境:python3.7 windows

requests模拟登陆

我们登陆DVWA的时候,看似只有一步:访问网站,输入用户名和密码,登陆成功则跳转到新页面。

其实这中间分了三步。


1、访问网站的瞬间,浏览器会先向网站的登录页面发送GET请求,然后服务器会返回带有 token 和 cookies 的信息给浏览器

2、浏览器收到服务器返回的信息后,从中提取token和cookie。

   当我们输入用户名和密码登录页面的时候,这次请求信息包含了我们输入的用户名和密码还有之前提取到的cookie和token信息。

如果输入的用户名和密码正确的话,服务器回复302重定向,将浏览器重定向到index.php页面。

如果输入的用户名和密码错误的话,服务器回复302重定向,将浏览器重定向到login.php登录页面

3、如果用户名和密码正常,浏览器发送GET请求,请求index.php页面

     如果用户名和密码错误,浏览器发送GET请求,请求login.php页面

所以,我们用python模拟登录DVWA的时候,先模拟向服务器发送登录请求,然后提取出服务器返回的 token 和 cookie。再利用获得到的cookie和token结合我们的用户名和密码进行登录。

代码实现:

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 6 17:01:15 2018
@author: 小谢
"""
import urllib
import requests
from bs4 import BeautifulSoup ##第一步,先访问 http://127.0.0.1/login.php页面,获得服务器返回的cookie和token
def get_cookie_token():
headers={'Host':'127.0.0.1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection':'keep-alive',
'Upgrade-Insecure-Requests':'1'}
res=requests.get("http://127.0.0.1/login.php",headers=headers)
cookies=res.cookies
a=[(';'.join(['='.join(item)for item in cookies.items()]))] ## a为列表,存储cookie和token
html=res.text
soup=BeautifulSoup(html,"html.parser")
token=soup.form.contents[3]['value']
a.append(token)
return a a=get_cookie_token() ##a列表中存储了服务器返回的cookie和toke ##第二步模拟登陆
def Two():
headers={'Host':'127.0.0.1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection':'keep-alive',
'Content-Length':'88',
'Content-Type':'application/x-www-form-urlencoded',
'Upgrade-Insecure-Requests':'1',
'Cookie':a[0],
'Referer':'http://127.0.0.1/login.php'}
values={'username':'admin',
'password':'password',
'Login':'Login',
'user_token':a[1]
}
data=urllib.parse.urlencode(values)
resp=requests.post("http://127.0.0.1/login.php",data=data,headers=headers)
return
Two() #重定向到index.php
headers={'Host':'127.0.0.1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection':'keep-alive',
'Upgrade-Insecure-Requests':'1',
'Cookie':a[0],
'Referer':'http://127.0.0.1/login.php'}
response=requests.get("http://127.0.0.1/index.php",headers=headers)
print(response.text)

实际用python模拟的话,他会多发两个包,具体为什么多发包我也不是很清楚,但是最后效果是达到了。成功用python模拟登录了DVWA。

Selenium自动化测试登陆

代码实现:

# -*- coding: utf-8 -*-
"""
Created on Sun Oct 7 16:35:22 2018
@author: 小谢
"""
from selenium import webdriver
import time driver=webdriver.Chrome("G:\Anaconda3-5.3.0\chromedriver.exe")
print("Login DVWA GO!")
driver.get("http://127.0.0.1/login.php")
print("get web in ")
time.sleep(3)
driver.find_element_by_name("username").send_keys("admin") ##找到输入用户名的input框,并且输入用户名
driver.find_element_by_name("password").send_keys("password") ##找到输入密码的input框,并且输入密码
driver.find_element_by_name("Login").click()
print("登录成功...")
time.sleep(10) ##登录成功后延时十秒退出
driver.close()

Python脚本模拟登陆DVWA的更多相关文章

  1. Python实现模拟登陆

    大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...

  2. 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站

    Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...

  3. python爬虫模拟登陆

    python爬虫模拟登陆 学习了:https://www.cnblogs.com/chenxiaohan/p/7654667.html  用的这个 学习了:https://www.cnblogs.co ...

  4. python+requests模拟登陆 学校选课系统

    最近学校让我们选课,每天都有不同的课需要选....然后突发奇想试试用python爬学校选课系统的课程信息 先把自己的浏览器缓存清空,然后在登陆界面按f12 如图: 可以看到登陆时候是需要验证码的,验证 ...

  5. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  6. python爬虫 模拟登陆校园网-初级

    最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登 ...

  7. Python脚本模拟僵尸进程与孤儿进程

    最近一台机器的systemd内存高达30%多,一直不变,后来排查是僵尸进程,什么是僵尸进程呢,只能google,百度等先了解,然后自己总结了一下,虽然这是基础的东西,但是对于我来说就如新大陆一样.花了 ...

  8. Python作业模拟登陆(第一周)

    模拟登陆:1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 思路: 1. 用户名密码文件为passwd,锁定用户文件为lock 2. 用户输入账号密码采用i ...

  9. python selenium模拟登陆163邮箱。

    selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...

随机推荐

  1. 【深入理解Java虚拟机】垃圾回收

    引用计数算法 给对象加一个计数器,引用一次+1,引用时效就-1,当计数器=0时对象就不能再被使用: 实现简单,判定效率高:Java虚拟接没有使用,主要原因是很难解决对象之间循环引用问题: GC算法: ...

  2. Java实现解压缩文件和文件夹

    一 前言 项目开发中,总会遇到解压缩文件的时候.比如,用户下载多个文件时,服务端可以将多个文件压缩成一个文件(例如xx.zip或xx.rar).用户上传资料时,允许上传压缩文件,服务端进行解压读取每一 ...

  3. CSS轮廓和圆角

    1 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset=" ...

  4. ch1_6_2求解删除公共字符问题

    输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成&q ...

  5. 开灯问题3_2(JAVA语言)

    package 第三章; public class 开灯问题3_2 { public static void main(String[] args) { // TODO Auto-generated ...

  6. c++ 反汇编 除法优化

    接上篇:<C++反汇编与逆向分析技术揭秘>--算术运算和赋值 printf("argc / 4 = %d\n", argc / 4); printf("arg ...

  7. PTA 单链表分段逆转

    6-9 单链表分段逆转 (25 分)   给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转.例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1 ...

  8. effective解读-第一条 静态工厂创建对象代替构造器

    好处 有名称,能见名知意.例如BigInteger的probablePrime方法 享元模式.单例模式中使用 享元模式:创建对象代价很高,重复调用已有对象,例如数据库连接等.享元模式是单例模式的一个拓 ...

  9. HOOK实现游戏无敌-直接修改客户端-2-使用VS来处理

    HOOK实现游戏无敌-直接修改客户端-2-使用VS来处理 大概流程 1 首先找到游戏进程,打开进程 2 申请一段内存空间来保存我们的硬编码(virtualAllocEx) 3 找到攻击函数,修改函数的 ...

  10. Linux性能优化:内存使用情况分析

    Blog:博客园 个人 目录 什么是内存 Linux内存回收机制 查看Linux内存情况 查看/proc/meminfo 使用free命令查看 Buffer和Cache Swap 内存泄漏和内存溢出 ...