目录

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结合我们的用户名和密码进行登录。

代码实现:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sat Oct 6 17:01:15 2018
  4. @author: 小谢
  5. """
  6. import urllib
  7. import requests
  8. from bs4 import BeautifulSoup
  9. ##第一步,先访问 http://127.0.0.1/login.php页面,获得服务器返回的cookie和token
  10. def get_cookie_token():
  11. headers={'Host':'127.0.0.1',
  12. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
  13. 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  14. 'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
  15. 'Connection':'keep-alive',
  16. 'Upgrade-Insecure-Requests':'1'}
  17. res=requests.get("http://127.0.0.1/login.php",headers=headers)
  18. cookies=res.cookies
  19. a=[(';'.join(['='.join(item)for item in cookies.items()]))] ## a为列表,存储cookie和token
  20. html=res.text
  21. soup=BeautifulSoup(html,"html.parser")
  22. token=soup.form.contents[3]['value']
  23. a.append(token)
  24. return a
  25. a=get_cookie_token() ##a列表中存储了服务器返回的cookie和toke
  26. ##第二步模拟登陆
  27. def Two():
  28. headers={'Host':'127.0.0.1',
  29. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
  30. 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  31. 'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
  32. 'Connection':'keep-alive',
  33. 'Content-Length':'88',
  34. 'Content-Type':'application/x-www-form-urlencoded',
  35. 'Upgrade-Insecure-Requests':'1',
  36. 'Cookie':a[0],
  37. 'Referer':'http://127.0.0.1/login.php'}
  38. values={'username':'admin',
  39. 'password':'password',
  40. 'Login':'Login',
  41. 'user_token':a[1]
  42. }
  43. data=urllib.parse.urlencode(values)
  44. resp=requests.post("http://127.0.0.1/login.php",data=data,headers=headers)
  45. return
  46. Two()
  47. #重定向到index.php
  48. headers={'Host':'127.0.0.1',
  49. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
  50. 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  51. 'Accept-Lanuage':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
  52. 'Connection':'keep-alive',
  53. 'Upgrade-Insecure-Requests':'1',
  54. 'Cookie':a[0],
  55. 'Referer':'http://127.0.0.1/login.php'}
  56. response=requests.get("http://127.0.0.1/index.php",headers=headers)
  57. print(response.text)

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

Selenium自动化测试登陆

代码实现:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sun Oct 7 16:35:22 2018
  4. @author: 小谢
  5. """
  6. from selenium import webdriver
  7. import time
  8. driver=webdriver.Chrome("G:\Anaconda3-5.3.0\chromedriver.exe")
  9. print("Login DVWA GO!")
  10. driver.get("http://127.0.0.1/login.php")
  11. print("get web in ")
  12. time.sleep(3)
  13. driver.find_element_by_name("username").send_keys("admin") ##找到输入用户名的input框,并且输入用户名
  14. driver.find_element_by_name("password").send_keys("password") ##找到输入密码的input框,并且输入密码
  15. driver.find_element_by_name("Login").click()
  16. print("登录成功...")
  17. time.sleep(10) ##登录成功后延时十秒退出
  18. 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. ASP.NET Core 在 .NET 6 Preview 2 中的更新

    原文:<ASP.NET Core updates in .NET 6 Preview 2>,作者 Daniel Roth .NET 6 预览版 2 现已推出,其中包括许多对 ASP.NET ...

  2. ajax传数组后台GO语言接收

    js代码如下: function PostHandle(url,data,callback) { $.ajax({ type: "Post", url:url, data:data ...

  3. JVM之对象回收

    finalize /** *此代码演示了两点: *1.对象可以在被GC时自我拯救. *2.这种自救的机会只有一次,因为一个对象的finalize()方法最多只会被系统自动调用一次 */ public ...

  4. OpenCV图像处理中“找圆技术”的使用

    一.为什么"找圆"     圆是基本图形的一种,更为重要的是,自然情况下采集的图像,很少大量存在"圆":但凡存在的,大都是人工的,那么就必然代表特定的意义,从而 ...

  5. vue实现拖拽排序

    基于vue实现列表拖拽排序的效果 在日常开发中,特别是管理端,经常会遇到要实现拖拽排序的效果:这里提供一种简单的实现方案. 此例子基于vuecli3 首先,我们先了解一下js原生拖动事件: 在拖动目标 ...

  6. kong更改日志格式

    基于业务的需求,需要对网关层的日志进行适当定制,以满足使用kibana的制图. 对于kong的日志格式更改,可查看到的资料都过于繁琐,特此记录. 修改kong的日志格式 # ctl edit depl ...

  7. 盘点 Django 展示可视化图表的多种方式(建议收藏)

    1. 前言 大家好,我是安果! 使用 Django 进行 Web 开发时,经常有需要展示图表的需求,以此来丰富网页的数据展示 常见方案包含:Highcharts.Matplotlib.Echarts. ...

  8. 【2020.02.01NOIP普及模拟4】怪兽

    [2020.02.01NOIP普及模拟4]怪兽 文章目录 [2020.02.01NOIP普及模拟4]怪兽 题目描述 输入 输出 输入输出样例 数据范围限制 提示 解析 code 题目描述 PYWBKT ...

  9. java.net.BindException: Problem binding to [hadoop103:8031] java.net.BindException

    ResourceManger启动失败,Namenode启动成功,这个问题排查了好久 在hadoop-2.7.6/logs/yarn-root-resourcemanager-hadoop102.log ...

  10. 【PHP】用了这么久的Laravel框架,你分析过核心架构了没

    Laravel最初的设计是为了面向MVC架构的,它可以满足如事件处理.用户身份验证等各种需求.另外它还有一个由管理数据库强力支持,用于管理模块化和可扩展性代码的软件包管理器. Laravel以其简洁. ...