Как сохранить функцию в консоли chrome и запустить ее после перезагрузки страницы? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть код, который я хочу поместить в консоль Chrome

var a = document.getElementsByClassName("dispo");
if (a.length > 0) {
    for (let i = 0; i < a.length ; i++) {
        if (a[i].textContent.length > 0) {
           console.log(a[i].parentElement.textContent.substr(0,10) + " - " + a[i].textContent);   
        }
    } 
} else {
    setInterval(function(){ document.location.reload() },60000);
}

Функция, приведенная выше, получает некоторые данные с веб-сайта, но если они не нашли данные, я хочу, чтобы они перезагружались каждую минуту, пока данные не станут доступны.
Я хочу вставить код только один раз и оставить браузер в работе.
Так как запустить функцию каждый раз, когда я перезагружаю страницу?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы можете изменить свой код, чтобы не перезагружать страницу каждый раз, а вместо этого запрашивать его через XMLHttpRequest. Затем вы можете проанализировать ответ в документе, используя DOMParser:

function request(callback) {                            // request will request the page content as text (without reloading)
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://your-url-here");
    xhr.onload = function() {
        callback(xhr.response);
    };
    xhr.send();
}

function next() {                                       // next will be called each time instead of reloading
    request(function(response) {                        // first we request the page
        var doc = new DOMParser().parseFromString(response, "text/html"); // then we parse it as a document

        var a = doc.getElementsByClassName("dispo");    // use doc instead of document (doc will be the newly requested document/page)
        if (a.length > 0) {
            for (let i = 0; i < a.length ; i++) {
                if (a[i].textContent.length > 0) {
                    console.log(a[i].parentElement.textContent.substr(0,10) + " - " + a[i].textContent);   
                }
            } 
        } else {
            setTimeout(next, 60000);                    // if we didn't find anything, then call next after a minute
        }
    });
}

next();

Примечания:

  1. Сначала убедитесь, что вы находитесь на этой странице, чтобы не было ошибки CORS.
  2. Если в URL есть параметры, вы должны отправить эти в виде .
0 голосов
/ 03 июля 2018

Согласно вашему коду, вы ожидаете асинхронную функцию, которая создаст элемент с именем класса "dispo". Затем, когда он будет загружен, вы будете что-то делать. Если это не так, вы проверите это через 1 минуту.

Попробуйте код ниже

const checkDispo=()=>{
    var a = document.getElementsByClassName("dispo");
    if (a.length > 0) {
        clearInterval(intv);
        for (let i = 0; i < a.length ; i++) {
            if (a[i].textContent.length > 0) {
               console.log(a[i].parentElement.textContent.substr(0,10) + " - " + a[i].textContent);   
            }
        } 
    }
}

const intv=setInterval(checkDispo,60000);
checkDispo();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...