Как сохранить объем или перенести изменения при смене сайта с помощью JS - PullRequest
0 голосов
/ 20 мая 2019

Я пишу простой кликбот на JavaScript для выполнения повторяющихся задач на стороннем веб-сайте.Он просто устанавливает входные значения, вызывает метод кнопок click() и, возможно, я заставлю его перейти к другим URL-адресам того же сайта.Первоначально я использовал Firefox, но получил то же поведение с Internet Explorer.

До сих пор я использую обычный JS, и пока я сам вставляю в каждую команду, все работает нормально, но вот проблема: каждый раз, когда новая страницазагружен (в том числе, когда JS нажимает кнопку отправки), я теряю все переменные и функции, которые я определил.Обратите внимание, что я использую веб-консоль, а не тег <script>, который, безусловно, будет отброшен при загрузке нового DOM.

Честно говоря, я не совсем понимаю, почему это происходит.Я посмотрел на область видимости JavaScript и документацию window.location и document.location. Этот сайт даже упоминал, что «В веб-браузере глобальные переменные удаляются при закрытии окна (или вкладки) браузера, но остаются доступными для новых страниц, загруженных в то же окно».(ср. здесь , но здесь дело не в этом)

Я думал, что это может быть потому, что строгий режим может быть включен по умолчанию, но это вызвало бы ошибку для name = "value" вместомолча интерпретируя его как локальную переменную.

Согласно этому ответу , любая переменная, объявленная вне каких-либо методов, должна быть глобальными переменными, которые являются свойствами окна.Изменение другого свойства окна (например, местоположения) не должно влиять на них - насколько я понимаю, - но даже при назначении свойств самостоятельно они исчезают, когда я загружаю другую страницу.

Полагаю, это можно обойти, еслиЯ написал свой собственный веб-сайт, на котором есть сайт, который мне нужен, в качестве iFrame, поэтому страница, на которой работает мой скрипт, фактически не будет изменена.Но все же это странно.Кто-нибудь может объяснить это поведение?Есть ли другой (простой) способ обойти это?

[Edit1] Благодаря политике того же происхождения мой предложенный обходной путь с использованием собственного веб-сайта и iframe не работает.Поскольку весь смысл моего кликабота должен быть запущен один раз и проходить по всем страницам самостоятельно, способ передачи данных (т.е. строк, включая JSON) отвечает на этот вопрос, но не решает мою проблему.

[Edit2] Для будущих посетителей: после недавних изменений принятый ответ предоставляет всю необходимую мне информацию.Greasemonkey - это то, что нужно, если вы можете использовать аддоны, но комбинация букмарклетов и стиль SessionStorage позволяет создать достойного бота, который выполняет все шаги между двумя перезагрузками всего одним пользовательским вводом.Другой (уродливый бот, возможно, более мощный) подход - открыть целевой веб-сайт и использовать document.body.innerHTML и обходной путь iframe.Таким образом, вы обойдете политику, основанную на том же происхождении, и сможете создавать свой собственный веб-сайт по мере необходимости и по-прежнему получать доступ к целевому веб-сайту.

1 Ответ

1 голос
/ 20 мая 2019

Что касается времени жизни переменной , этот вопрос SO подробно описан, но переменные не сохраняются при перезагрузках.

Если вы остаетесь в одном и том же домене (например, все происходитв https://example.com,, так что https://example.com/page1, https://example.com/page2, и т. д.), тогда вы можете использовать куки или локальное хранилище для отслеживания значений.

Вы не можете легко отслеживать функции с локальным хранилищем или файлами cookie.

Файлы cookie и локальное хранилище недоступны для разных доменов.

Я бы использовал локальное хранилище как таковоелегче взаимодействовать с.Поэтому вместо:

var someVar = 'hello';

Запись

localStorage['someVar'] = 'hello';

Затем использовать переменную:

console.log(localStorage['someVar']);

Локальное хранилище имеет максимальный размер 10 МБ.Вероятно, достаточно для любого сценария автоматизации.

Если вы хотите сохранить функции при перезагрузке страницы, вы должны использовать что-то вроде grease monkey для хранения пользовательских сценариев.

...