超级鹰(更简单的操作验证)

 - 超级鹰
- 注册:普通用户
- 登陆:
- 创建一个软件(id)
- 下载示例代码

1.12306自动登录

# Author: studybrother sun
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
from PIL import Image #截图用到的模块 bro = webdriver.Chrome(executable_path=r'./chromedriver.exe')
bro.get('https://kyfw.12306.cn/otn/login/init') #这个网址和其他是有区别的 time.sleep()
#img标签
code_img_ele = bro.find_element_by_xpath('//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img')
time.sleep()
#验证码图片的左上角的坐标
location = code_img_ele.location # x,y
print('验证码图片的左上角的坐标location:', location)
size = code_img_ele.size # 验证码图片的长和宽
print('验证码图片的长和宽size:', size)
#验证码左上角和右下角这两个点的坐标
rangle = (
int(location['x']), int(location['y']), int(location['x'] + size['width']), int(location['y'] + size['height'])
) #截取当前浏览器打开的这张页面对应的图像
bro.save_screenshot('aa.png') i = Image.open('./aa.png')
#即将被截取下来验证码图片的名称
code_img_name = './code.png' #crop就可以根据左上角和右下角的坐标进行指定区域的截取
frame = i.crop(rangle)
frame.save(code_img_name) import requests
from hashlib import md5 class Chaojiying_Client(object): def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id #
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id, #
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
} def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,
headers=self.headers)
return r.json() def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json() chaojiying = Chaojiying_Client('xuebaohua', '123456xbh', '') # 用户中心>>软件ID 生成一个替换
im = open('./code.png', 'rb').read()
result = chaojiying.PostPic(im, )['pic_str'] # 9004验证码类型
print("***************", result)
# result = result['pic_str'] all_list = [] #[[x1,y1],[x2,y2],[x3,y3]] #,这里办存储的是小列表
if '|' in result: # ,|,|,
list_1 = result.split('|')
count_1 = len(list_1)
for i in range(count_1):
xy_list = []
x = int(list_1[i].split(',')[]) #[[x,y],[]]
y = int(list_1[i].split(',')[])
xy_list.append(x)
xy_list.append(y)
all_list.append(xy_list)
else:
x = int(result.split(',')[]) #[[x,y]]
y = int(result.split(',')[])
xy_list = []
xy_list.append(x)
xy_list.append(y)
all_list.append(xy_list)
print(all_list)
code_img = bro.find_element_by_xpath('//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img') action = ActionChains(bro) for l in all_list:
x = l[]
y = l[]
ActionChains(bro).move_to_element_with_offset(code_img, x, y).click().perform() bro.find_element_by_id('username').send_keys('')
time.sleep()
bro.find_element_by_id('password').send_keys('asdf1234')
time.sleep()
bro.find_element_by_id('loginSub').click()
time.sleep() bro.find_element_by_xpath('//*[@id="J-index"]/a').click()
time.sleep() # bro.find_element_by_id('fromStationText').send_keys('北京') # 出发地 输入拼音大小写或汉字
# time.sleep(0.2)
# bro.find_element_by_id('toStationText').send_keys('天津') # 到达地 输入拼音大小写或汉字
# time.sleep(0.2)
# bro.find_element_by_id('train_date').send_keys('2019-5-6') # 出发日期
# time.sleep()
# bro.find_element_by_id('search_one').click()
# time.sleep() # bro.quit()

注意:这部分代码可能会存在一些问题

2.pyppeteer基本使用

参考blog:

基于浏览器自动化的模块

测试网站:http://quotes.toscrape.com/js/全部是动态加载出来的数据

安装这个模块:  pip install pyppeteer

下面的程序运行之后,可以装谷歌的测试版本,运行之后的下载,可能会慢一些,没有关系

from pyppeteer import launch
import asyncio #实例化一个浏览器对象(谷歌浏览器测试版本)
async def main():
bro=await launch(headless=False)
page=await bro.newPage()
c=main()
loop=asyncio.get_event_loop()
loop.run_until_complete(c)

升级pyppeteer的测试程序:

from pyppeteer import launch
import asyncio
from lxml import etree #进行解析的模块
async def main():
# 实例化一个浏览器对象(谷歌浏览器测试版本)
bro=await launch(headless=False)
#新建一个空白页
page=await bro.newPage()
await page.goto('http://quotes.toscrape.com/js/')
#针对上边的url进行动态爬取
#获取page当前显示页面的源码数据
page_text=await page.content()
#注意:page或者launch的内部代码都是需要加上await的
return page_text def parse(task):
page_text=task.result()
tree=etree.HTML(page_text)
div_list=tree.xpath('//div[@class="quote"]')
for div in div_list:
content=div.xpath('./span[1]/text')[]
print(content)
c=main()
taks=asyncio.ensure_future(c)
taks.add_done_callback(parse)#回调函数

目前到这,未完待续,浏览器没有安装完

小爬爬4:12306自动登录&&pyppeteer基本使用的更多相关文章

  1. Linux系列:Ubuntu/fedora实用小技巧—禁止自动锁屏、设置免密码自动登录、免密码执行sudo操作

    首先声明:该文虽以Ubuntu 13.04为例,同样适用于Fedora 17(已测试),但在较低版本的Ubuntu下可能有所差异,具体看后面的注意事项. 技巧目录: 解决Ubuntu下每隔几分钟自动锁 ...

  2. 12306.cn网站自动登录器源代码

    去年过年放假的时候写了一个12306.cn网站的自动登录器,刚好那时候放假了,所以没把源代码放出来,现在将代码发出来,由于编写得比较仓促(从放假的下午19:00左右到晚上到00:00左右),很多细节问 ...

  3. 微信小程序一步一步获取UnionID,实现自动登录

    思路: 1.小程序端获取用户ID,发送至后台 2.后台查询用户ID,如果找到了该用户,返回Token,没找到该用户,保存到数据库,并返回Token 小程序端如何获取用户ID: 小程序端 wx.getU ...

  4. 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...

  5. 让Win8自动登录免输入密码的小技巧

    按Win+R键,输出“netplwiz”,单击“确定”,弹出“用户帐户”窗口.将第一个画框上的勾选去掉——应用——弹出自动登录输入你的密码——确定——确定完成.重启看看电脑是不是不用输入密码也可以自动 ...

  6. LINUX 和WINDOWS下的自动登录小脚本

    每天上班第一件事,就是连接公司LAB里面的机器,但首先要过一个防火墙,每次输用户名密码是很累人的事, 以下是两个脚本,可以放在启动项中,开机便自动登录 WINDOWS: @echo off ipcon ...

  7. C#_自动化测试1_模拟post,get_12306火车票网站自动登录工具

    还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web ...

  8. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  9. java代码实现自动登录功能

    通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下 登录页面:login.jsp & ...

随机推荐

  1. Python爬虫笔记【一】模拟用户访问之验证码清理(4)

    清理图片,对图片进行二值化,去边框,去干扰线,去点 from PIL import Image from pytesseract import * from fnmatch import fnmatc ...

  2. ECMAScript 5 严格模式

    1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量 在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我 ...

  3. Xcode10 代码块(Code Snippet)添加和删除

    https://blog.csdn.net/lg767201403/article/details/82761448 Code Snippets 使用 https://blog.csdn.net/lv ...

  4. 使用powerDesigner绘制类图

    使用powerDesigner绘制类图 因为后面要理清楚spring中类与类之间关系,我们来看看如何使用powerDesigner绘制类图 你要去下载powerDesiger,一路下一步安装好 打开, ...

  5. Leetcode103. Binary Tree Zigzag Level Order Traversal二叉树的锯齿形层次遍历

    给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / ...

  6. 【python之路42】web框架们的具体用法

    Python的WEB框架 (一).Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. p ...

  7. LA4254 Processor

      题意:有n个任务,每个任务有三个参数ri,di和wi,表示必须在时刻[ri,di]之内执行,工作量为wi.处理器执行速度可以变化,当执行速度为s时,工作量为wi.处理器的速度可以变化,当执行速度为 ...

  8. Wamp PHP 安装各种拓展

    安装redis 下载dll文件地址:http://pecl.php.net/package/redis 下载对应版本nginx:NTS apache:TS 文件放在php的ext目录下 php.ini ...

  9. python 基础(while 循环、格式化输出、运算符、编码初识)

    while循环 break 终止当前循环 count = 1 while count < 3: print(count) count += 1 break # while循环中一旦代码执行到br ...

  10. nginx 限制ip的请求频率

    需要注意,这个很容易误伤 还需要结合别的办法进行共同配置 总是有人很清闲的扫我的网站 ,所以要限制一下了 先来看看没有限制的时候,并发10 100次 服务器一直在正常响应  限制一下,之后再测试一下 ...