документ не определен в Google URL Harvester - PullRequest
0 голосов
/ 09 марта 2011

У меня есть код, полученный от Google для сбора URL-адресов от Google. Я сохранил его как filename.js. Когда я запустил файл, он показал, что «документ» не определен ». Часть кода, которая показывает проблему -

// ==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 и запускаю его. Я делаю что-то не так?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Google, как и большинство веб-сайтов, со временем обновляет свою структуру.

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;
}
0 голосов
/ 09 марта 2011

Я могу только догадываться, что ошибка выдается, потому что вы пытаетесь получить доступ к элементу "input", прежде чем создавать его позже.Более того, вы не должны использовать HTML-элемент в качестве идентификатора в JavaScript.Вы также можете использовать Firebug, чтобы точно определить ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...