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

 - 超级鹰
- 注册:普通用户
- 登陆:
- 创建一个软件(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. Java学习笔记 - 类方法与代码块的执行顺序

    类的初始化顺序 使用一个简单的父子类例子来做示范,代码执行顺序在代码后有标注. class Parent { public static String p_StaticField = "父类 ...

  2. kafka使用示例

    示例代码如下: producer生产者 package main import ( "fmt" "github.com/Shopify/sarama" ) fu ...

  3. kuangbin带我飞QAQ 线段树

    1. HDU1166 裸线段树点修改 #include <iostream> #include <string.h> #include <cstdio> #incl ...

  4. c++新特性实验(5)声明与定义:属性列表(C++11 起)

    1.初识属性 1.1 实验A: noreturn 属性 [[ noreturn ]] static void thread1(void *data){ cout << "nore ...

  5. 浏览器在IE8 以下时显示提示信息,提示用户升级浏览器

    <!--[if lt IE 8]> <div style="background: #eeeeee;border-bottom: 1px solid #cccccc;col ...

  6. textarea高度自动增高

    <!--随着textarea 输入内容 自动增加高度--> <script type="text/javascript"> $(".input_t ...

  7. webpack4配置react开发环境

    webpack4大大提高了开发效率,简化了配置复杂度,作为一个大的版本更新,作为一个对开发效率执着的爱折腾的程序员,已经忍不住要尝尝鲜了 首先是cli和webpack的分离,开发webpack应用程序 ...

  8. SpringBoot+Shiro+mybatis整合实战

    SpringBoot+Shiro+mybatis整合 1. 使用Springboot版本2.0.4 与shiro的版本 引入springboot和shiro依赖 <?xml version=&q ...

  9. 公司-广告-WPP:WPP

    ylbtech-公司-广告-WPP:WPP WPP集团 (LSE:WPP) (NASDAQ:WPPGY),是世界上最大的传播集团,总部位于英国伦敦.WPP集团拥有 60 多个子公司,主要服务于本地.跨 ...

  10. org.openqa.selenium.ElementNotInteractableException: element not interactable

    F12查看元素确实存在的 有人说延长加载时间 webDriver.manage().timeouts().implicitlyWait(, TimeUnit.SECONDS); // 等待5秒加载完成 ...