如何开发一个抢单chrome插件
2017-05-26 14:12
1461 查看
出于学写chrome插件&满足买买买心态的目的,试了下从零开始写一个chrome抢单插件。实验的网站是nike和adidas的美国官网。
大致历程
买本chrome插件教程通读一下。 在阳台上晒晒太阳喝着下午茶,看起来还巨简单,很开心的2小时。跟着教程学写最简单的chrome插件。so easy,一晚上很愉快的度过,一点点成就感。
了解nike和adidas网站购买下单流程,分析用户需求&网络请求。需要点耐心,国内网站会更快一点。
设计插件功能和样式。画画页面设计图(就是几个表单),流程图(状态指来指去,一种天下我有的爽感)。
写插件。一言难尽吧~~~
插件设计
需求
用户生成待抢订单,填写商品url、规格、数量、地址、支付信息等。自动刷商品、下单。(可同时刷多单,查看订单列表、状态、详情)
功能概述
根据用户给的网站账号自动登录。根据商品链接抓取商品信息、规格等。
生成待抢订单。
自动刷商品页,加购物车。
自动填写地址、支付信息,下单。
页面设计
配置页(nike和adidas用户账户、address、payment信息,其他可配置项)商品详情页
订单详情页
订单列表页
订单状态图
自己在稿纸上画了一个图,大致包括prepare、start、cart、ordering、succ、fail等几个状态。
adidas为例,实际状态比预想的多,用一个Pipeline控制流程:
private static final int CODE_FAIL = 0; private static final int CODE_PREPARE_ORDER = 1; private static final int CODE_ADD_TO_CART = 2; private static final int CODE_CHECKOUT = 3; private static final int CODE_ADD_ADDRESS = 4; private static final int CODE_CHOOSE_SHIPPING = 5; private static final int CODE_ADD_PAYMENT = 6; private static final int CODE_ADD_PAYMENT_1 = 12; private static final int CODE_REVIEW_ORDER_1 = 11; private static final int CODE_REVIEW_ORDER = 7; private static final int CODE_THANK_YOU_PAGE = 8; private static final int CODE_SIGN_IN = 9; private static final int CODE_UNKNOWN = 10;
数据表设计
订单表 OrderOrderStatus(enum 订单状态)
商品表 Goods
用户信息表
User, 插件用户
Account, 购物网站账户
Address,购物网站收货地址
购物网站表 Site
插件开发
包括2部分,摘取一些代码片段以供参考。插件本身: 页面、数据表
模拟下单:登录、规格库存获取、加购物车、下单,模拟用户手动下单时发送的网络请求
抓取商品页 (以Adidas为例)
private ExecResult<Document> getOneSkuInfoPage(String url) { try { doc = AdidasUtils.getHttpGetResponseWithDocument(url, "", httpsClient); return createResult(true, doc, null); } catch (IOException e) { LogUtils.info(AdidasConstants.ERROR_PREFIX + e.toString()); } return createResult(false, doc, "Get goods page fail."); } public static Document getHttpGetResponseWithDocument(String url, String referrer, DecompressingHttpClient httpClient) throws IOException { AdidasUtils.printHtmlUrl(url); response = getHttpGetResponse(url, referrer, httpClient); Document doc = Jsoup.parse(EntityUtils.toString(response.getEntity(), "UTF-8")); EntityUtils.consume(response.getEntity()); AdidasUtils.printHtmlTitle(doc); return doc; }
在商品详情页抓取商品信息
标题、描述(这些内容不会变,很好抓,只要取到响应的DOM节点就好)sku属性:颜色、尺码、价格、库存(和每个型号的skuId对应,加购物车时用skuId)
见 http://blog.csdn.net/maowenbei/article/details/72809019
登录
模拟登录的过程有点难,会遇到各种问题,比如token之类的。见 http://blog.csdn.net/maowenbei/article/details/72809063
相关文章推荐
- 如何开发一个Joomla插件
- 如何开发Chrome(谷歌)浏览器的插件
- 如何将 Chrome 变成开发利器,开发者们在用这些插件
- 简单说 如何做一个chrome 去广告插件
- 【jquery】如何自己开发一个简单的jquery 插件
- rails开发利器:视频播放插件plugin(如何开发一个简单的插件)
- Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?
- <转>如何将Chrome变成开发利器,开发者们在用这些插件
- 推荐一个安卓开发用得到的Chrome插件
- 简单说 如何做一个chrome 去广告插件
- 在chrome插件开发中,如何executeScript多个content script文件
- 开发一个chrome小插件
- 如何创建一个状态栏扩展(火狐插件扩展开发教程)
- 如何将 Chrome 变成开发利器,开发者们在用这些插件
- 如何开发一个jquery插件
- rcp(插件开发)如何在一个透视图中显示多个视图
- 【chrome拓展开发】如何写一个cookie修改器
- 黄聪:360、chrome开发插件扩展如何跨域调用其他网站的信息并且显示在扩展、tab中的api
- 浏览器---Chrome前端开发必备插件,如何设置代理,react调试,定死https协议,sublime热更新,浏览器发请求post
- 如何开发一个Jquery插件?