0%

櫃買-券商買賣證券日報表研究

櫃買-券商買賣證券日報表研究

櫃買-券商買賣證券日報表研究

櫃買-券商買賣證券日報表 VS 我不是機器人

  • 券商買賣證券日報表查詢系統(一般交易)
    此系統可取得最近一日的上櫃買賣日報。但網站加了 google 的 「我不是機器人」驗證,以避免程式抓取。 (reCAPTCHA v2)。
  • 網站中有一個隱藏的 textarea
    reCAPTCHA
  • 可以先行手動修改 html,然後將驗證複製出來。這個驗證可以放在 postdata 中,只要驗證尚未過期,是可以透過程式抓取最終的 csv 檔的。
    GRecaptchaResponse

破解驗證的 api

anti-captcha網站有提供「我不是機器人」的破解服務。以下就實際註冊帳號並實作破解驗證並下載資料。

  1. 註冊帳號,使用 google 登入即可。
    desc
  2. Accept User Agreement
    accept
  3. 註冊完成後,可以看到帳戶餘額以及金鑰,這個金鑰是在使用 api 時需用到的。同時也可以看到,每使用 1000 次「我不是機器人」的破解服務,費用是 2 美金。
    registered
  4. 在 Finance 選單中,可以使用 Demo Credit 功能,輸入自己的手機後,可以獲得 $0.01 至 $0.1 美金的試用額度。
    demo1
    demo2
  5. 接下來可以看網站中的 api 教學文件
    decuments
  6. 其中也有提供 C# 範例程式 (github)
    c#
  7. 將取得的範例程式,改寫如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    private static void ExampleRecaptcha2Proxyless(string url)
    {
    string result = string.Empty;

    DebugHelper.VerboseMode = true;

    var api = new RecaptchaV2Proxyless
    {
    ClientKey = ClientKey,
    WebsiteUrl = new Uri(url),
    //WebsiteUrl = new Uri("https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw"),
    WebsiteKey = "6LcCoP8SAAAAAKzsvbTXymxqNWcC-dAhDYik0V3C"
    };

    if (!api.CreateTask())
    DebugHelper.Out("API v2 send failed. " + api.ErrorMessage, DebugHelper.Type.Error);
    else if (!api.WaitForResult())
    DebugHelper.Out("Could not solve the captcha.", DebugHelper.Type.Error);
    else
    {
    DebugHelper.Out("Result: " + api.GetTaskSolution().GRecaptchaResponse, DebugHelper.Type.Success);
    }
    }
    這裡有兩個變數值需注意。
    首先是 WebsiteUrl 。這邊輸入「券商買賣證券日報表查詢系統(一般交易)」的網址,也就是 https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw
    然後是 WebsiteKey 。需要輸入的值是 6LcCoP8SAAAAAKzsvbTXymxqNWcC-dAhDYik0V3C 。可由 chrome F12 得到。
    data-sitekey
  8. 實際執行程式,可以看到 api 有確實取得驗證
    perfome_api

完整程式

如果需要下載指定清單中的全部股票資料,有下列事項需要特別注意

  1. 兩檔股票間需要加上間隔,否則 ip 會被 ban。可參考使用 15 秒+一個隨機秒數。
  2. 透過 api 取得的驗證,有可能在一段時間之後失效。此時需透過 api 重新取得一次驗證。
  3. 即使重新取得驗證,直接再下載檔案還是有可能會出現錯誤訊息。
    invalid
  4. 目前測試結果,是參考手動操作步驟情境,在取得驗證之後先 POST https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw 一次,然後才是 POST https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/download_ALLCSV.php 下載 csv 檔案。
  5. 實際透過程式批次下載成果 (有在驗證失效後,自動重新驗證並下載的版本)
    final