Greasy Fork

露天拍賣登入便(可自動登入)

在露天拍賣(www.ruten.com.tw)登入時,可使用 Enter 直接登入,免去辨識圖片登入按鈕位置,亦可修改本 Script 輸入帳號密碼進行自動登入。

目前为 2014-06-13 提交的版本。查看 最新版本

// ==UserScript==
// @name           露天拍賣登入便(可自動登入)
// @namespace      wsmwason.ruten.easylogin
// @description    在露天拍賣(www.ruten.com.tw)登入時,可使用 Enter 直接登入,免去辨識圖片登入按鈕位置,亦可修改本 Script 輸入帳號密碼進行自動登入。
// @include        https://member.ruten.com.tw/*
// @version        0.6
// @auther         wsmwason
// ==/UserScript==

/**
 * Date:
 *   2012/06/22
 *
 * Authors:
 *   露天拍賣的登入實際上需要 Captcha 的驗證,只是做成了圖片位置座標變換,
 *   需要以肉眼判斷座標位置,此 Script 使用 HTML5 canvas 讀取圖片位置,
 *   將可透過 Enter 直接進行登入。
 *   這年頭了露天拍賣居然還可以使用 big5 撐到現在,實在厲害。
 *
 * Changelog:
 *
 *  2014/06/14 Ver 0.6
 *  		-- 改放 Greasy Fork
 *
 *  2012/06/22 Ver 0.5
 *  		-- 提供露天拍賣自動登入
 *  		-- 提供露天拍賣免辨識圖片登入按鈕位置直接以 Enter 登入
 */
 
//設定帳號 
var userName = '';
//設定密碼
var passWord = '';
//設定是否自動登入
var autoLogin = false;


function insertAfter(newEl, targetEl)
{
  var parentEl = targetEl.parentNode;
  if(parentEl.lastChild == targetEl){
    parentEl.appendChild(newEl);
  }else{
    parentEl.insertBefore(newEl,targetEl.nextSibling);
  }            
}


//取消一些沒用的檢查
var overwriteScriptCode = new Array();
overwriteScriptCode = [
  'function noenter(event){ return true; }',
  'function img_reload(){ }'
];
var script = document.createElement('script');
script.innerHTML = overwriteScriptCode.join('\n');
document.getElementsByTagName('head')[0].appendChild(script); 


//自行讀取驗證圖片
var timestamp = (new Date()).getTime();
document.getElementById("captcha").value = timestamp;
document.getElementById("btn_login").src = "image.php?key="+timestamp;


//自動登入時填入資訊
if(userName!='') document.getElementById('userid').value = userName;
if(passWord!='') document.getElementsByName('userpass')[0].value = passWord;
document.getElementsByName('expire')[0].checked = true;
document.getElementById("userid").focus();


//讀取驗證圖片寫入 Captcha
var refNode = document.getElementById('btn_login');
var captchaX, captchaY = 0;
var img = new Image();
var context;
var canvas = document.createElement('canvas');
img.onload = function() {
  canvas.width = img.width;
  canvas.height = img.height;
  canvas.getContext('2d').drawImage(img, 0, 0);
  context = canvas.getContext("2d")
  context.drawImage(img, 0, 0);
  var imageData = context.getImageData(0, 0, canvas.width, canvas.height);

  var findPixel = false;
  for(x=0;x<=canvas.width;x++){
    if(findPixel==true) break;
    for(y=0;y<=canvas.height;y++){
      var index = (y*imageData.width + x) * 4;
      var red = imageData.data[index];
      var green = imageData.data[index + 1];
      var blue = imageData.data[index + 2];
      var alpha = imageData.data[index + 3];

      if(red==4 && green==2 && blue==4 && alpha==255){ 
        captchaX = x;
        captchaY = y;
        findPixel = true;
        break;
      }
    }
  }
  
  var inputLoginX = document.createElement('input');
    inputLoginX.setAttribute('type', 'hidden');
    inputLoginX.setAttribute('name', 'btn_login.x');
    inputLoginX.setAttribute('value', captchaX);

  var inputLoginY = document.createElement('input');
      inputLoginY.setAttribute('type', 'hidden');
      inputLoginY.setAttribute('name', 'btn_login.y');
      inputLoginY.setAttribute('value', captchaY);
      
  insertAfter(inputLoginX, refNode);
  insertAfter(inputLoginY, refNode);

  if(userName!='' && passWord!='' && autoLogin==true){
    var form = document.getElementsByName('main')[0];
    form.action = "login.php?refer=https%3A%2F%2Fmember.ruten.com.tw%2Fuser%2Flogin.htm";
    form.submit();
  }
  
};
img.src = "image.php?key="+timestamp;