1 (изменено: Botsy, 2021-02-05 05:56:45)

Тема: AHK: получение элементов из facebook, chrome.ahk

Как правильно получить элемент со страницы ФБ (лайк, комментарий, поделиться) и работать с ним? На других сайтах как бы "открытая" html страница, а на ФБ всё запаковано в script. На других сайтах просмотрев код страницы, можно найти нужный html элемент(его id, class, связанные для них ивенты и т.д.), а на фб элемент находит, а ивенты нет.

Использую биб. chrome.ahk, для манипуляции с содержимым HTML DOM. Рабочий пример для клика по первому найденно-заданному элементу:


#Include Chrome.ahk

DarkS_page := Chrome.GetPage()
DarkS_js = 
(
document.querySelector('div load360614 o9v6fnle cxmmr5t8').click();
)

page.Evaluate(DarkS_js)

return
F12::ExitApp

Например эта страница и кнопка лайка, да и вообще любая страница и активность на ней https://www.facebook.com/DMENDEFENDERS/ … 2936524888.
https://i.ibb.co/LvYB5zq/image.png

Блок "нравится":


div rq0escxv l9j0dhe7 du4w35lb j83agx80 cbu4d94t g5gj957u d2edcug0 hpfvmrgz rj1gh0hx buofh1pr n8tt0mok hyh9befq iuny7tx3 ipjc6fyt

У всех связанных блоков, не работают ивенты. Ошибка, что их как бы и нет.

GD

2

Re: AHK: получение элементов из facebook, chrome.ahk

Набираете в гугле "css селекторы" и читаете гайды от мозиллы, или лёрн.джаваскрипт.

У Вас в 7 строке первого примера, клик сообщается ноду с тегом "cxmmr5t8", который может быть любым потомком нода с тегом "o9v6fnle", который может быть любым потомком нода с тегом "load360614", который может быть любым потомком любого "div". Соответственно всех тегов, кроме "div" — не существует. Тогда кому сообщается клик?

Набираете в гугле "браузер консоль разработчика" и читаете гайды от оных же, как пользоваться консолью.

Ко всему прочему, сейчас довольно распространённая практика писать не сайты, а разворачивать приложения на странице. Время статичных страничек давно стало историей. Все популярные соц. сети вроде FB используют модульные системы разработки для таких приложений, так как они позволяют сильно упростить разработку этих приложений. Это в свою очередь накладывает свои особенности на поведение страниц. Если собираетесь взаимодействовать с таким контентом, может оказаться сильно полезным узнать, что у таких фреймворков "под капотом".

3 (изменено: Botsy, 2021-02-05 20:06:58)

Re: AHK: получение элементов из facebook, chrome.ahk

В 7 строке можно было оставить так: "div.load360614" и всё равно работало бы. Т.к. это точный класс дива, он всего один и ему принадлежит всего 1 элемент button, но не суть.
Про талмуд обучения я в курсе, логично как бы, а вот что есть приложения на странице вместо статики - не знал. Поэтому я и не смог достать нужный элемент, походу способы отличаются. Даже через консоль, как достать нужный элемент на фб, если там приложение, а не статика ?
Проверял массив через GetElementByClass, на других сайтах содержит развернутую информацию, а тут нет.


document.getElementsByClassName('span d2edcug0 hpfvmrgz qv66sw1b c1et5uql rrkovp55 a8c37x1j keod5gw0 nxhoafnm aigsh9s9 d3f4x2em fe6kdd0r mau55g9w c8b282yb iv3no6db jq4qci2q a3bd9o3v lrazzd5p m9osqain');

HTMLCollection []
length: 0
__proto__: HTMLCollection
item: ƒ item()
length: (...)
namedItem: ƒ namedItem()
constructor: ƒ HTMLCollection()
Symbol(Symbol.iterator): ƒ values()
Symbol(Symbol.toStringTag): "HTMLCollection"
get length: ƒ length()
__proto__: Object

https://i.ibb.co/mypgNxR/error.jpg

GD

4

Re: AHK: получение элементов из facebook, chrome.ahk

Botsy пишет:
document.getElementsByClassName('span ...

span — это не className, это название тега.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Botsy, 2021-02-05 16:26:22)

Re: AHK: получение элементов из facebook, chrome.ahk

teadrinker Да, вроде кроме имени класса можно передавать к какому тегу это будет относиться, для более точного поиска. object.getElementsByClassName("tag.class")

GD

6

Re: AHK: получение элементов из facebook, chrome.ahk

Это где вы такое прочитали?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: получение элементов из facebook, chrome.ahk

На https://www.w3schools.com/. Проверил, перепутал с querySelector, там можно передавать тег. Но даже если изменить, как правильно в браузере для FB можно посмотреть где прописан нужный мне ивент? Что бы я знал конечную цель, к какой мне нужно будет обращаться через js.

GD

8

Re: AHK: получение элементов из facebook, chrome.ahk

Не совсем уверен, что вы понимаете под ивентами?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: получение элементов из facebook, chrome.ahk

Ивенты - это события, которые обрабатывают команды через функции. Например, есть поле ввода <input>. Чтобы он реагировал на поведение мышки, когда пользователь наводит на это поле, нужно обработать событие "onmousemove" и в функции описать как это будет работать. А потом можно будет обратиться к этому ивенту через .mousemove().
В моём случае, на кнопке "лайк", должен же быть ивент onclick, чтобы я мог обратиться к нему через .click(). Но я не могу найти этот ивент, а значит я не знаю к чему должен обратиться.

Взять например гугл. https://www.google.com/webhp?hl=ru& … 5wARQQPAgI
Есть элемент и есть его ивент, а значит можно обратиться и выполнить команду, клик:


<input class="gNO89b" value="Поиск в Google" aria-label="Поиск в Google" name="btnK" type="submit" data-ved="0ahUKEwiJt4_m69LuAhVV6uAKHfkfDMAQ4dUDCAs">

document.querySelector('input.gNO89b').click();
GD

10

Re: AHK: получение элементов из facebook, chrome.ahk

А как вы на странице гугла определили, что событие click обрабатывается этим элементом?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: получение элементов из facebook, chrome.ahk

У любого инпута или кнопки, должен же быть обработчик. Тут нет вложенных блоков и т.д., один единственный инпут, один класс и такое же событие.
https://i.ibb.co/2WX7GCZ/error.jpg

GD

12

Re: AHK: получение элементов из facebook, chrome.ahk

Ну, сейчас на скриншоте у вас обработчики событий не этого элемента, а всех его предков (там галочка в самом верху), не факт, что если все перечисленные там события произойдут на данном элементе, то они будут обработаны. Но конкретно click на нём действительно есть, я просто не на тот элемент посмотрел.
Так и на фейсбуке на кнопке «Нравится» такой же список есть. Просто уберите галку с «Предки» (по-английски возможно ancestors), и идите вверх по дереву, пока не появится обработка click.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: получение элементов из facebook, chrome.ahk

Все разобрался. Хотя получилось странно.
Убрал события предков, вариант 1:
Ивент оказался только у родительского элемента. При чем с таким классом нашлось 40+ элементов. Отсеял лишнее и получилось кликнуть на нужное.
https://i.ibb.co/1zSy7bG/error.jpg


Убрал события предков, вариант 2:
У элемента не показывало вообще ивентов, однако точечно получилось кликнуть, почему ? Ведь ивентов не показывало.
https://i.ibb.co/Gs5yTgy/error2.jpg


document.querySelector('span.a2odkss1.elqgv22k.pq6dq46d').click();
GD

14

Re: AHK: получение элементов из facebook, chrome.ahk

События могут "всплывать".

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: получение элементов из facebook, chrome.ahk

Идеально, это многое объясняет. Люблю когда паззл складывается, спасибо .

GD