小爬爬4:12306自动登录&&pyppeteer基本使用
超级鹰(更简单的操作验证)
- 超级鹰
- 注册:普通用户
- 登陆:
- 创建一个软件(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基本使用的更多相关文章
- Linux系列:Ubuntu/fedora实用小技巧—禁止自动锁屏、设置免密码自动登录、免密码执行sudo操作
首先声明:该文虽以Ubuntu 13.04为例,同样适用于Fedora 17(已测试),但在较低版本的Ubuntu下可能有所差异,具体看后面的注意事项. 技巧目录: 解决Ubuntu下每隔几分钟自动锁 ...
- 12306.cn网站自动登录器源代码
去年过年放假的时候写了一个12306.cn网站的自动登录器,刚好那时候放假了,所以没把源代码放出来,现在将代码发出来,由于编写得比较仓促(从放假的下午19:00左右到晚上到00:00左右),很多细节问 ...
- 微信小程序一步一步获取UnionID,实现自动登录
思路: 1.小程序端获取用户ID,发送至后台 2.后台查询用户ID,如果找到了该用户,返回Token,没找到该用户,保存到数据库,并返回Token 小程序端如何获取用户ID: 小程序端 wx.getU ...
- 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...
- 让Win8自动登录免输入密码的小技巧
按Win+R键,输出“netplwiz”,单击“确定”,弹出“用户帐户”窗口.将第一个画框上的勾选去掉——应用——弹出自动登录输入你的密码——确定——确定完成.重启看看电脑是不是不用输入密码也可以自动 ...
- LINUX 和WINDOWS下的自动登录小脚本
每天上班第一件事,就是连接公司LAB里面的机器,但首先要过一个防火墙,每次输用户名密码是很累人的事, 以下是两个脚本,可以放在启动项中,开机便自动登录 WINDOWS: @echo off ipcon ...
- C#_自动化测试1_模拟post,get_12306火车票网站自动登录工具
还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗. 今天我们就开发一个12306网站自动登录软件. 帮助您轻松订票 通过前两篇博客Fiddler教程和HTTP协议详解,我们了解了Web ...
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- java代码实现自动登录功能
通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下 登录页面:login.jsp & ...
随机推荐
- java类增强方式
我理解的增强类即是对类进行功能性扩展,除了网上常规的3种方法( 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但增强内容不可变. 3.动态代理 ...
- keras multi-label classification 多标签分类
问题:一个数据又多个标签,一个样本数据多个类别中的某几类:比如一个病人的数据有多个疾病,一个文本有多种题材,所以标签就是: [1,0,0,0,1,0,1] 这种高维稀疏类型,如何计算分类准确率? 分类 ...
- 跟我一起了解koa(三)
跟我一起了解koa中间件 一.是 什么是 Koa 的中间件 通俗的讲: :中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以 把它叫做中间件. 在 在express件 中间件( (Mi ...
- LUOGU P1779 魔鬼杀手_NOI导刊2010提高(03)
传送门 解题思路 背包,首先先用aoe都打残然后单伤补刀,用f[i]表示AOE打了i的伤害的最小花费,g[i]表示单伤打了i的伤害的最小花费. 代码 #include<iostream> ...
- json字符串和对象的相互转换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式. 同时,JSON是 JavaScript 原生格式,这 ...
- MySQL加快批量更新 UPDATE优化
如果是更新为同样的内容,没啥难度,直接在where里面下功夫就好了,大家都懂,我要说的是针对更新内容不一样的情况 首先,先看看网上转载的方法: mysql 批量更新如果一条条去更新效率是相当的慢, 循 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之RemoteControlTest[转]
1 2{<HeadFirst设计模式>之命令模式 } 3{ 本单元中的类为命令的接收者 } 4{ 编译工具 :Delphi7.0 } 5{ 联 ...
- jnhs-Myeclipse 10注册教程unable to access jarfile cracker.jar
直接双击jar文件就可以 打开后,随便写一个名字 然后复制LICENSE_KEY的内容,打开myeclipse 在Code那里粘贴你刚才复制的内容,然后点击Save & Active Now ...
- navicat修改mysql用户密码,前提是能登陆
幸亏之前已经连上了数据库后边才忘记密码
- linux性能监视工具sar
sar是一个优秀的一般性能监视工具,它可以输出Linux所完成的几乎所有工作的数据.sar命令在sysetat rpm中提供.示例中使用sysstat版本5.0.5,这是稳定的最新版本之一.关于版本和 ...