2011-03-09 49 views
-1

我從Google取得代碼以從Google收集網址。我將它保存爲filename.js。當我運行該文件時顯示「'文檔'未定義」。代碼顯示問題的部分是文檔在Google URL收集器中未定義

// ==UserScript== 
// @name   Google URL Harvester 
// @namespace  http://userscripts.org/scripts/show/42998 
// @description Harvests URLs from a Google Search 
// @include  http://www.google.co.uk/ 
// @include  http://www.google.com/ 
// ==/UserScript== 

var btn_container; 
var inputs = document.getElementsByTagName("input"); 
for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].name == "btnG") 
     btn_container = inputs[i].parentNode; 
} 

function find_next_link(html) { 
    var url = html.match(/(<a href="[^"]+">)\s*<span[^>]+style="[^"]*background-position:\s?-76px\s/); 
    if (url == null) 
     return false; 

    var div = document.createElement("div"); 
    div.innerHTML = url[1]; 
    return div.firstChild.href; 
} 

function harvest(query_url, callback) { 
    ajax(query_url, function(e){ 
     var als = e.match(/<a[^>]+class=l[^>]*>/g); 
     for (var i = 0; i < als.length; i++) { 
      urls.push(als[i].match(/href="([^"]+)"/)[1]); 
     } 
     var next_url = find_next_link(e); 
     if (next_url) 
      harvest(next_url, callback); 
     else 
      callback(); 
    }); 
} 

function ajax(url, callback) { 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4 && req.status == 200) { 
      callback(req.responseText); 
     } 
    } 
    req.open("GET", url, true); 
    req.send(""); 
} 

var new_button = document.createElement("input"); 
new_button.type = "button"; 
new_button.value = "Harvest URLs"; 
new_button.setAttribute("onsubmit", "return false;"); 
btn_container.appendChild(new_button); 
var urls = []; 
new_button.addEventListener("click", function(){ 
    var query_url = unsafeWindow.document.forms[0].action + "?num=100&q="+escape(unsafeWindow.document.forms[0].q.value); 
    document.body.innerHTML = "<img src='http://oneworldwebsites.com/images/wheel%20throbber.gif' />"; 
    harvest(query_url, function() { 
     document.body.innerHTML = urls.join("<br/>"); 
    }); 
},false); 

這裏我沒有定義文件(如果有必要的話)。任何人都可以糾正這個代碼中的錯誤。操作系統是Windows 7.

我將這個文件保存到我的桌面harv.js並運行它。我做錯了什麼?

+0

我寧願使用jQuery'$(文件)。就緒(函數(){' \t'的console.log($('輸入[名稱=「btng 「]')。parent())' '})' – diEcho 2011-03-09 05:49:11

+0

@narayanpatra,你到底想幹什麼? – diEcho 2011-03-09 05:49:47

+0

你使用什麼瀏覽器?你可以對文檔的其他部分看起來如何? – 2011-03-09 05:49:58

回答

0

我可以猜測,錯誤是因爲您嘗試在稍後創建它之前訪問「輸入」元素而引發的。此外,您不應該在JavaScript中使用html元素作爲標識符。你也可以使用Firebug來查明錯誤。

1

谷歌喜歡大多數網站隨着時間的推移更新其結構。

for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].name == "btnG") 
     btn_container = inputs[i].parentNode; 
} 

需要變得

for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].name == "btnK") //<<------G to K 
     btn_container = inputs[i].parentNode; 
}