1. 程式人生 > >如何開發一個搶單chrome外掛

如何開發一個搶單chrome外掛

出於學寫chrome外掛&滿足買買買心態的目的,試了下從零開始寫一個chrome搶單外掛。實驗的網站是nike和adidas的美國官網。

大致歷程

  1. 買本chrome外掛教程通讀一下。 在陽臺上晒晒太陽喝著下午茶,看起來還巨簡單,很開心的2小時。
  2. 跟著教程學寫最簡單的chrome外掛。so easy,一晚上很愉快的度過,一點點成就感。
  3. 瞭解nike和adidas網站購買下單流程,分析使用者需求&網路請求。需要點耐心,國內網站會更快一點。
  4. 設計外掛功能和樣式。畫畫頁面設計圖(就是幾個表單),流程圖(狀態指來指去,一種天下我有的爽感)。
  5. 寫外掛。一言難盡吧~~~

外掛設計

需求

  • 使用者生成待搶訂單,填寫商品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;

資料表設計

  • 訂單表 Order
    • OrderStatus(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;
    }

在商品詳情頁抓取商品資訊

登入

模擬登入的過程有點難,會遇到各種問題,比如token之類的。見 http://blog.csdn.net/maowenbei/article/details/72809063