代码应用场景 :基于第三方打码网站模拟登陆12306

  验证码识别

    基于第三方平台超级鹰识别

    超级鹰官网:http://www.chaojiying.com/user/

  超级鹰使用流程:

    注册 登陆(用户中心)充值

    创建一个软件:软件ID->生成一个软件ID(901977)

    下载实例代码->开发文档->python

1. 重新封装在打码平台下载到的python代码

  1. #!/usr/bin/env python
  2. # coding:utf-8
  3.  
  4. import requests
  5. from hashlib import md5
  6.  
  7. class Chaojiying_Client(object):
  8.  
  9. def __init__(self, username, password, soft_id):
  10. self.username = username
  11. password = password.encode('utf8')
  12. self.password = md5(password).hexdigest()
  13. self.soft_id = soft_id
  14. self.base_params = {
  15. 'user': self.username,
  16. 'pass2': self.password,
  17. 'softid': self.soft_id,
  18. }
  19. self.headers = {
  20. 'Connection': 'Keep-Alive',
  21. 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  22. }
  23.  
  24. def PostPic(self, im, codetype):
  25. """
  26. im: 图片字节
  27. codetype: 题目类型 参考 http://www.chaojiying.com/price.html
  28. """
  29. params = {
  30. 'codetype': codetype,
  31. }
  32. params.update(self.base_params)
  33. files = {'userfile': ('ccc.jpg', im)}
  34. r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
  35. return r.json()
  36.  
  37. def ReportError(self, im_id):
  38. """
  39. im_id:报错题目的图片ID
  40. """
  41. params = {
  42. 'id': im_id,
  43. }
  44. params.update(self.base_params)
  45. r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
  46. return r.json()

2.登陆12306代码逻辑

  1. from selenium import webdriver
  2. from selenium.webdriver import ActionChains
  3. from CJY import Chaojiying_Client
  4. from time import sleep
  5. from PIL import Image
  6.  
  7. #pip install Pillow
  8.  
  9. def get_code_text(imgPath,imgType):
  10. chaojiying = Chaojiying_Client('超级鹰账号', '超级鹰密码', '创建的软件ID') # 用户中心>>软件ID 生成一个替换 96001
  11. im = open(imgPath, 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
  12. return chaojiying.PostPic(im, imgType)
  13.  
  14. bro = webdriver.Chrome(executable_path='./chromedriver.exe')
  15. bro.get('https://kyfw.12306.cn/otn/login/init')
  16. sleep(2)
  17. userName = bro.find_element_by_id('username')
  18. userName.send_keys('12306账号')
  19. sleep(2)
  20. passWord = bro.find_element_by_id('password')
  21. passWord.send_keys('12306密码')
  22.  
  23. # bro.set_window_size(800,600)
  24. bro.set_window_size(1920,1080)
  25.  
  26. #验证码识别,实现点击操作
  27. bro.save_screenshot('./main.png') #当前页面所对应的一整张图片
  28.  
  29. #验证码图片的标签
  30. code_img_tag = bro.find_element_by_xpath('//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img')
  31.  
  32. #验证码图片左下角坐标
  33. location = code_img_tag.location #location返回的是位置
  34. size = code_img_tag.size
  35. # 裁剪区域
  36. rangle = (int(location['x']),int(location['y']),int(location['x'])+size['width'],int(location['y']+size['height']))
  37.  
  38. i = Image.open('./main.png')
  39. frame = i.crop(rangle)
  40. frame.save('./code.png')
  41.  
  42. img_text = get_code_text('./code.png',9004)
  43. img_text = img_text['pic_str']
  44. print(img_text,type(img_text))
  45.  
  46. all_list = []
  47. if '|' in img_text:
  48. list_1 = img_text.split('|')
  49. count_1 = len(list_1)
  50. for i in range(count_1):
  51. xy_list = []
  52. x = int(list_1[i].split(',')[0])
  53. y = int(list_1[i].split(',')[1])
  54. xy_list.append(x)
  55. xy_list.append(y)
  56. print(xy_list)
  57. all_list.append(xy_list)
  58.  
  59. else:
  60. x = int(img_text.split(',')[0])
  61. y = int(img_text.split(',')[1])
  62. xy_list = []
  63. xy_list.append(x)
  64. xy_list.append(y)
  65. all_list.append(xy_list)
  66.  
  67. print(all_list)
  68. for p in all_list:
  69. x = p[0]
  70. y = p[1]
  71. # x ,y 就是即将要点击的坐标
  72. ActionChains(bro).move_to_element_with_offset(code_img_tag,x,y).click().perform()
  73. sleep(1)
  74.  
  75. login_btn = bro.find_element_by_xpath('//*[@id="loginSub"]')
  76. login_btn.click()
  77.  
  78. sleep(5)
  79. bro.quit()

ps: 如果不成功,最好是把自己电脑文字分辨率调整成100%

selenium 12306模拟登陆的更多相关文章

  1. 利用Python与selenium自动化模拟登陆12306官网!

    近年来,12306的反爬越来越来严重,从一年前的 获取tk参数后到现在增加了 JS.CSS等加密方式! 目前大部分人利用的登陆方式都是利用selenium ,此文也不例外. 环境:        Wi ...

  2. Python Selenium + phantomJS 模拟登陆教务管理系统 “抢课”

    # _*_coding:utf-8_*_ from selenium import webdriver from selenium.webdriver.common.action_chains imp ...

  3. python selenium模拟登陆163邮箱。

    selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...

  4. 爬虫必知必会(4)_异步协程-selenium_模拟登陆

    一.单线程+多任务异步协程(推荐) 协程:对象.可以把协程当做是一个特殊的函数.如果一个函数的定义被async关键字所修饰.该特殊的函数被调用后函数内部的程序语句不会被立即执行,而是会返回一个协程对象 ...

  5. Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

    本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from sel ...

  6. Python模拟登陆万能法-微博|知乎

    Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...

  7. Selenium&Pytesseract模拟登录+验证码识别

    验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...

  8. Selenium&Pytesseract模拟登录+验证码识别

    验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...

  9. 模拟登陆百度以及Selenium 的基本用法

    模拟登陆百度,需要依赖于selenium 模块,调用浏览器,执行python命令 先来说一下这个selenium模块啦...... 本文参考内容来自 Selenium官网 SeleniumPython ...

随机推荐

  1. .NET笔记题库(一)

    1 (1)面向对象的语言具有__继承性_性._封装性_性._多态性 性. (2)能用foreach遍历访问的对象需要实现 _ IEnumerable 接口或声明_ GetEnumerator 方法的类 ...

  2. hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

    1.源码 java1.7    hashMap 底层实现是数组+链表 java1.8 对上面进行优化  数组+链表+红黑树 2.hashmap  是怎么保存数据的. 在hashmap 中有这样一个结构 ...

  3. kotlin中访问封闭作用内的变量

    在java中,匿名对象访问封闭作用域内的变量,需要用final 声明变量在java8中,如果只是使用封闭作用域内的变量,该变量并不需要使用final,但是一旦修改值,就需要使用final 来声明变量. ...

  4. Java动态修改运行环境

    1.pom.xml直接添加一下配置 <profiles> <profile> <id>dev</id> <properties> <a ...

  5. 5.性能测试工具比较:Jmeter和LR

    性能测试工具较多,无法一一进行介绍,感兴趣者可自行搜索资料学习.需要说明的是工具使用方法和原理都大同小异,掌握一个,其他皆可快速上手. 下面就以服务端的性能测试工具为例,对市场上最常用,知名度较高,也 ...

  6. iOS自定义下拉列表

    实现效果如下: 点击导航栏的“点击”,弹出下拉列表. 注意:绿色的是控制器的view背景,又一个遮罩层,点击可以隐藏列表. Github地址: https://github.com/PengSiSi/ ...

  7. php微信支付企业付款到零钱报错call faild, errorCode:58

    这个报错一般是自己证书目录不是绝对目录,正确的目录结构应该是网站根目录下的:“C:\PHPWAMP_IN1\wwwroot\XXXX\XXXX.pem”.          还要注意的是文件夹命名一定 ...

  8. selenium3 web自动化测试框架 五: 数据驱动简介及基础使用

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动.简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使 ...

  9. from提交数据,高级选择器,伪类选择器,前端样式等

    1. form提交数据 get: 不安全的提交数据,高效 post: 安全的提交数据,低效 前台都可以给后台提交数据,后台一定会给前台一个反馈结果 2. 高级选择器 <!DOCTYPE html ...

  10. eNSP使用-不同网段的互联

    就像下面这个场景: 1.基本配置 先点击左上角的——新建 然后咱们把要用的设备都拖到面板上去 成品就是这样的: 点击这个为他们添加备注 我们来配置一下实验编址 右键单击PC1设置(PC2同理,就不多演 ...