Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как распарсить DOM ? (https://javascript.ru/forum/misc/65371-kak-rasparsit-dom.html)

Артист 17.10.2016 08:26

Блин, я думаю, чего у меня null всё время показывает querySelector(с любым тегом).
Проверил:
alert(document.documentElement.innerHTML)


Оказывается document берёт не из той страницы, которая открылась, а из страницы, на которой подключен скрипт(я её не подключал, видимо хром сам).

<head></head><body><script src="background.js"></script></body>

warren buffet 17.10.2016 09:09

Артист, html - это текст, но ковырять его самому не надо. Ты же не станешь ковырять файл екзеля ради редактирования таблицы. Ты напишешь скрипт работающий с документом как с объектом. Для браузера хтмл - такой же документ и браузер делает из него объект. Поскольку документ описан в иерархических сущностях хтмл, то и объект представляет из себя дерево. Вот и лазай по нему, или лазий.

Почитай документацию уже.

Артист 17.10.2016 13:12

Да я полазил бы - не лазиется...
Я в фоновом скрипте отлавливаю когда в браузере страница открылась и все элементы прогружены.
А document не видит эту страницу, видит только страницу с которой подключен скрипт...

Смотрел исходники ABP Block'a, он же как - то убирает со страницы элементы.
И ничего не нашел.
Вернее нашел, но не работает.
Пробовал так:
alert(window.document.documentElement.innerHTML)
alert(this.window.document.documentElement.innerHTML)


Ещё находил там(в исходниках), event.tabId , смотрел там номер возвращает, может от него надо получать...

Артист 17.10.2016 13:16

Цитата:

Сообщение от warren buffet (Сообщение 431982)
Почитай документацию уже.

Читал, сто раз уже, гуглил... Ничего не понятно(даже с переводом).

Вот тут про webNavigation

И там вообще ничего нет, как получить что - то со страницы...

warren buffet 17.10.2016 18:34

Артист, ты юзерский скрипт что ли пишешь, или какой-то поддон?

Поставь на FF - Greasemonkey и отстань от этого тупого хрома навсегда.

warren buffet 17.10.2016 18:37

Цитата:

Сообщение от Артист
Вот тут про webNavigation

Это параллельная вселенная, ты уверен, что взял правильный курс? Опиши задачу на русском языке, может и делать ничего не надо, все может быть уже сделано.

Артист 17.10.2016 20:49

Ну, есть игра одна браузерная, мне надоело что невозможно что - то продать в игре, т.к. 7к игроков онлайна.
Ну я накатал приложение которое всё автоматом продаёт, и теперь хочу сделать чтобы не по кнопке щелкать для этого дела, а просто поставил галочку, и пускай он ходит по карте да торгует.
Думал прямо на странице сделать 2 кнопки(или чекбоксы)...

Ну и вот нужно отловить, когда перс пришёл...

Цитата:

Сообщение от warren buffet (Сообщение 432051)
Поставь на FF - Greasemonkey и отстань от этого тупого хрома навсегда.

Да это всё переделывать нужно...Тем более я чисто хромом пользуюсь, проще к нему делать напрямую...

Артист 17.10.2016 21:17

Вот тут описывается как это сделать, а я не понимаю, т.к. вообще не знаю JS.

Внедрение Javascript-кода в страницу через Chrome Extension

Цитата:

background.js

$.get(chrome.extension.getURL('/injected.js'), 
	function(data) {
		var script = document.createElement("script");
		script.setAttribute("type", "text/javascript");
		script.innerHTML = data;
		document.getElementsByTagName("head")[0].appendChild(script);
		document.getElementsByTagName("body")[0].setAttribute("onLoad", "injected_main();");
	}
);
  1. Мы используем стандартную функцию Chrome Extension API chrome.extension.getURL(), которая возвращает путь, локальный для расширения.
  2. Далее мы запрашиваем данный файл через ajax и после успешного получения создаем новый элемент в основной странице (Благодаря Shared DOM мы можем манипулировать элементами страницы без лишних усилий)
  3. Последним пунктом мы устанавливаем функцию, которая будет вызвана после загрузки страницы (функция injected_main() описана в файле injected.js)

1 - вообще не понял, что возвращает и от куда?

warren buffet 17.10.2016 21:28

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

В упомянутом GM юзерский скрипт ничем от обычного не отличается. Почему в хроме какие-то дебильные заморочки, я не понял. В общем если дело ограничивается работой с документом, то в ГМ пишут вот так

var elem=document.querySelector('.foo');

и все работает, в точности как если бы оно было в скрипте загруженным со страницей.

А вот когда тебе захочется забраться в кишки этих самых скриптов, там есть небольшой геморрой с интерфейсом UnsafeWindow, но через него почти все можно получить по части кодов страницы - переменные, функции, писать, запускать и все такое.

И только в редких случаях, когда не получается добраться нормально, тогда приходится что-то парсить. Но такое ну очень редко бывает.

warren buffet 17.10.2016 21:31

Цитата:

Сообщение от Артист
1 - вообще не понял, что возвращает и от куда?

Нехилая там эпидерсия.

Какой нахер аякс? Скрипт для браузера хранится локально. Ты куда полез вообще?


Часовой пояс GMT +3, время: 00:47.