Ряд важных вопросов про использование JS, DOM, С#

Tony80

Client
Регистрация
21.07.2021
Сообщения
222
Благодарностей
68
Баллы
28
Доброго дня,

В рамках разработки поведенческого движка для ZennoPoster (модель естественного скроллинга страницы) столкнулся с рядом технических вопросов, касающихся выполнения JavaScript и доступа к DOM страницы.

Задача построить корректную модель прокрутки, желательно с возможностью определения геометрии документа (scrollHeight, scrollTop, clientHeight и т.д.). Накопился ряд принципиально важных вопросов с которыми важно разобраться.

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

1. Контекст выполнения JS-кубика

В кубике JavaScript доступны режимы:
  • Локально
  • На текущей странице
  • На странице расширения
  • При загрузке страницы
  • При создании окна страницы
Однако при попытке выполнить даже простейшие DOM-операции (например, document.title или document.documentElement.scrollHeight) переменная результата остаётся пустой, при том что простой код вроде 123; отрабатывает корректно (результат помещается в переменную).

Вопросы:
  1. Выполняется ли JS-кубик в реальном DOM-контексте страницы?
  2. В каком режиме JS имеет доступ к объектам window и document?
  3. Есть ли ограничения выполнения JS в Chromium from ZennoBrowser?
  4. Требуется ли дополнительная настройка профиля или проекта для доступа к DOM через JS?

2. Доступ к scroll-параметрам страницы

Для реализации корректного Scroll Engine требуется доступ к:
  • document.documentElement.scrollHeight
  • document.documentElement.clientHeight
  • window.pageYOffset
  • document.documentElement.scrollTop
Вопросы:
  1. Возможно ли получить данные значения через JS-кубик?
  2. Если да — в каком режиме выполнения?
  3. Если нет — существует ли альтернативный способ получить текущую позицию прокрутки через C# API (например через Tab, ActiveTab или другие объекты)

3. Работа через CDP

Попытка использовать CdpDocument.EvaluateScript приводит к ошибке выполнения.

Вопросы:
  1. Поддерживается ли EvaluateScript в Chromium from ZennoBrowser?
  2. Есть ли ограничения CDP в определённых режимах (антидетект, прокси, эмуляция)?
  3. Нужно ли активировать вкладку или ожидать полной загрузки DOM перед выполнением JS через CDP?

4. Execution Context
  1. В каком execution context выполняется JS-кубик?
  2. Можно ли явно указать главный фрейм?
  3. Есть ли способ принудительно выполнить JS именно в контексте основной страницы, а не sandbox?

5. Альтернативные способы получения геометрии страницы

Если прямой доступ к DOM через JS невозможен:
  1. Существует ли способ получить scrollHeight / scrollTop через C# без JS?
  2. Есть ли события или методы, позволяющие определить достижение низа страницы?
Буду признателен за разъяснения.
От ответов зависит архитектура реализации Scroll Engine и выбор между физической (через scrollTop) и вероятностной моделью прокрутки.

Заранее спасибо всем откликнувшимся.
 

b1zar

Client
Регистрация
29.06.2019
Сообщения
164
Благодарностей
96
Баллы
28
Доброго дня,

В рамках разработки поведенческого движка для ZennoPoster (модель естественного скроллинга страницы) столкнулся с рядом технических вопросов, касающихся выполнения JavaScript и доступа к DOM страницы.

Задача построить корректную модель прокрутки, желательно с возможностью определения геометрии документа (scrollHeight, scrollTop, clientHeight и т.д.). Накопился ряд принципиально важных вопросов с которыми важно разобраться.

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

1. Контекст выполнения JS-кубика

В кубике JavaScript доступны режимы:
  • Локально
  • На текущей странице
  • На странице расширения
  • При загрузке страницы
  • При создании окна страницы
Однако при попытке выполнить даже простейшие DOM-операции (например, document.title или document.documentElement.scrollHeight) переменная результата остаётся пустой, при том что простой код вроде 123; отрабатывает корректно (результат помещается в переменную).

Вопросы:
  1. Выполняется ли JS-кубик в реальном DOM-контексте страницы?
  2. В каком режиме JS имеет доступ к объектам window и document?
  3. Есть ли ограничения выполнения JS в Chromium from ZennoBrowser?
  4. Требуется ли дополнительная настройка профиля или проекта для доступа к DOM через JS?

2. Доступ к scroll-параметрам страницы

Для реализации корректного Scroll Engine требуется доступ к:
  • document.documentElement.scrollHeight
  • document.documentElement.clientHeight
  • window.pageYOffset
  • document.documentElement.scrollTop
Вопросы:
  1. Возможно ли получить данные значения через JS-кубик?
  2. Если да — в каком режиме выполнения?
  3. Если нет — существует ли альтернативный способ получить текущую позицию прокрутки через C# API (например через Tab, ActiveTab или другие объекты)

3. Работа через CDP

Попытка использовать CdpDocument.EvaluateScript приводит к ошибке выполнения.

Вопросы:
  1. Поддерживается ли EvaluateScript в Chromium from ZennoBrowser?
  2. Есть ли ограничения CDP в определённых режимах (антидетект, прокси, эмуляция)?
  3. Нужно ли активировать вкладку или ожидать полной загрузки DOM перед выполнением JS через CDP?

4. Execution Context
  1. В каком execution context выполняется JS-кубик?
  2. Можно ли явно указать главный фрейм?
  3. Есть ли способ принудительно выполнить JS именно в контексте основной страницы, а не sandbox?

5. Альтернативные способы получения геометрии страницы

Если прямой доступ к DOM через JS невозможен:
  1. Существует ли способ получить scrollHeight / scrollTop через C# без JS?
  2. Есть ли события или методы, позволяющие определить достижение низа страницы?
Буду признателен за разъяснения.
От ответов зависит архитектура реализации Scroll Engine и выбор между физической (через scrollTop) и вероятностной моделью прокрутки.

Заранее спасибо всем откликнувшимся.
В кубике JS все работает, все команды отдают результат. Надо прописывать retrun перед командой, если просто вставить команду, то она не чего не вернет. Но смысла использовать кубики JS особо нет, так в c# реализовано выполнения этих скриптов через команду return instance.ActiveTab.MainDocument.EvaluateScript("return document.documentElement.scrollHeight;");
 
  • Спасибо
Реакции: Dmitriy_Zenno и Tony80

Tony80

Client
Регистрация
21.07.2021
Сообщения
222
Благодарностей
68
Баллы
28
В кубике JS все работает, все команды отдают результат. Надо прописывать retrun перед командой, если просто вставить команду, то она не чего не вернет. Но смысла использовать кубики JS особо нет, так в c# реализовано выполнения этих скриптов через команду return instance.ActiveTab.MainDocument.EvaluateScript("return document.documentElement.scrollHeight;");
Благодарю за ответ, попробую! :dh:
 
Регистрация
02.06.2025
Сообщения
23
Благодарностей
8
Баллы
3
Я когда аналогичный скрипт делал нейросетка тоже все время пыталась через EvaluateScript брать параметры страницы js'ом что мне принципиально не понравилось, хотя наверно если просто брать параметры то это едва ли палевнее методов на c#. В любом случае получилось нормально сделать и без js, хоть и было это чуть сложнее. Высоту страницы например можно узнать так instance.ActiveTab.MainDocument.Height;
 
  • Спасибо
Реакции: Dmitriy_Zenno

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)