Как исправить мою задержанную петлю, которая застряла через 5 секунд? - PullRequest
0 голосов
/ 27 июня 2019

Я хотел бы создать Jscript, который я вставил бы в Google Chrome Consol, и он должен скопировать часть элемента innerHTML в буфер обмена. Это должно быть сделано в каждом в течение длительного периода времени.

До сих пор мне удалось написать код, который циклически изменялся от 0 до 9, вызывая функцию, которая копирует содержимое в буфер обмена, а затем спит в течение 1 секунды. Он также записывает в консоль количество циклов и сами данные.

    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    function mycopy() {
        var copy = function (e) {
            e.preventDefault();
            var text = document.getElementsByClassName("md-tile")[0].innerHTML
            text = text.substring(0,10)
            console.log(text);
            if (e.clipboardData) {
                e.clipboardData.setData('text/plain', text);
            } else if (window.clipboardData) {
                window.clipboardData.setData('Text', text);
            }
        };
        window.addEventListener('copy', copy);
        document.execCommand('copy');
        window.removeEventListener('copy', copy);
    }

    var text = "a"
    for (let XYZ = 0; XYZ < 10; XYZ++) {
        console.log('copy' + XYZ + ' Sec');
        text = ""
        mycopy();
        await sleep(1000);
    }
    console.log('Done');

Насколько я понимаю с моими ограниченными знаниями, приведенный выше сценарий должен скопируйте внутренний HTML-код первого элемента, где класс является «md-title».

Однако копирование прекратится ровно через 5 секунд. (это все еще 5 секунд, если мы изменим время сна.)

Это ответ в консоле:

copy0 Sec
div класс
copy1 Sec
div класс
copy2 Sec
div класс
copy3 Sec
div класс
copy4 Sec
div класс
copy5 Sec
copy6 Sec
copy7 Sec
copy8 Sec
copy9 Sec
Готово

Есть идеи как обойти это? Существует ли ограничение по времени для достижения буфера обмена через 5 секунд? Это хромовое ограничение или windows (7)?

1 Ответ

0 голосов
/ 28 июня 2019

Итак, в конце концов мне удалось решить мою проблему, однако я не смог использовать буфер обмена, поскольку мы потеряли к нему доступ через 5 секунд.

Мое решение состояло в том, что я загрузил HTML-часть как txt.

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
function download(filename, text) {
      var element = document.createElement('a');
      element.setAttribute('href', 'data:text/plain;charset=utf-8,' + text);
      element.setAttribute('download', filename);
      element.style.display = 'none';
      document.body.appendChild(element);
      element.click();
      document.body.removeChild(element);
}

for (let XYZ = 0; XYZ < 10; XYZ++) {
    var text0 = document.getElementById('lastUpdate').innerHTML     
    download("DialogLiveLogTime.txt",text0);
    await sleep(2000);
    console.log('Round: ' + XYZ)
}

С помощью приведенного выше кода Google Chrome загрузит внутренний HTML-файл в виде txt-файла.Первоначально это вызвало бы всплывающее окно Сохранить как, но вы можете отключить это в меню параметров Chrome, плюс вы можете указать место назначения там.Тем временем может быть целесообразно удалить загруженные журналы с той же периодичностью или после чтения другим сценарием.

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