Прокрутка блока на сайте с фокусом курсора мыши на ней

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
Всем доброго дня!

Честно уже несколько часов курил форум, ничего толкового не нашёл (не отрицаю, что я дурак).

Есть сайт:

Там есть блок на ~43к строчек с выдачей по 100 результатов.
При открытии страницы (получить DOM) в этом коде отображается только 12 строчек.
Если прокрутить форму и ещё раз получить DOM, то в коде отображаются следующие результаты, но предыдущие пропадают.

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

Пробовал и Focus с последующим instance.ActiveTab.FullEmulationMouseWheel(0,100); //Прокрутка
Но прокручивается только сама страница.

Пробовал и получение leftinbrowser и topinbrowser с последующей эмуляцией мыши.
Но почему-то тоже не получается.

Кажется, что ответ лежит на поверхности, но я вообще не понимаю что не так....

Как бы решения 2 пока придумал но реализовать не получается.

1. Можно ли в ZennoPoster (специально обновил до версии 7.7.9.0) сохранить то, что отображается в инстансе встроенного браузера? (специально после загрузки страницы отключал интернет и данные на странице есть, но если получать DOM, то их нет).
2. Скроллинг этого блока, с последующим заворачиванием его в цикл. Но он почему-то не хочет скроллится и прокручивается только сама страница.

Возможно кто-нибудь подтолкнёт к решению?
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
875
Благодарностей
356
Баллы
63
сначала наводи мышку на нужный блок instance.ActiveTab.FullEmulationMouseMove(500,500); предварительно высчитав координаты внутри блока.
потом делай instance.ActiveTab.FullEmulationMouseWheel(0,100);
 
  • Спасибо
Реакции: DictorZetLBS и Ssmodey

Ахилес

Client
Регистрация
11.11.2020
Сообщения
875
Благодарностей
356
Баллы
63
а лучше посмотри запросы этого сайта. там в JSON данные передаются. проще собрать запросы и все данные уже в куче. ничего не надо с мышкой делать ;-)

116175
 
  • Спасибо
Реакции: Ssmodey

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
сначала наводи мышку на нужный блок instance.ActiveTab.FullEmulationMouseMove(500,500); предварительно высчитав координаты внутри блока.
потом делай instance.ActiveTab.FullEmulationMouseWheel(0,100);
СПАСИБО!!!
Всё оказывается очень просто. Я это пытался кубиком эмуляции мыши делать, а оказывается всё решается одной строчкой C# (даже координаты 500,500 подходят, что забавно). Пора учить C# (и тщательнее читать справку по нему) :-)

116182
 

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
а лучше посмотри запросы этого сайта. там в JSON данные передаются. проще собрать запросы и все данные уже в куче. ничего не надо с мышкой делать ;-)

Посмотреть вложение 116175
А не могли бы Вы показать пример запроса к странице, который выдаёт JSON? (ну или хотя бы намекнуть где искать).
Вроде бы перерыл все постгеты, в упор не вижу нужного
116183
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
875
Благодарностей
356
Баллы
63
в этом кажется были данные ... в devtolls, вкладка сеть, там можно поиском искать. или в фидлере тоже поиском.

116184
 
  • Спасибо
Реакции: Ssmodey

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
А не могли бы Вы показать пример запроса к странице, который выдаёт JSON? (ну или хотя бы намекнуть где искать).
Вроде бы перерыл все постгеты, в упор не вижу нужного
Посмотреть вложение 116183
Откройте DevTools в зенно справа иконка над браузерным окном. Далее в network - перезагружаете страницу , далее во вкладке network - ctrl+f (поле поиска откроется), вбиваете значение в поле, которое ищите, нажимаете ентер. Далее смотрите в каких запросах есть ваше совпадение.
 
  • Спасибо
Реакции: Ssmodey

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
Откройте DevTools в зенно справа иконка над браузерным окном. Далее в network - перезагружаете страницу , далее во вкладке network - ctrl+f (поле поиска откроется), вбиваете значение в поле, которое ищите, нажимаете ентер. Далее смотрите в каких запросах есть ваше совпадение.
Вам так же спасибо!
По Вашей инструкции получилось найти POST запрос.
 

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
Но всё равно остался вопрос. Я конечно же понимаю, что нужно собирать данные от GET, потом переносить в этот POST. Это если делать полностью на запросах. Но мне это не особо обязательно, можно и через браузер.

Нет ли решения из коробки?

Т.е. сделать через инстанс браузера запрос к странице. Она загрузилась в браузер.
А потом простым кубиком, используя куки и всё остальное из браузера, получить этот ответ в JSON?
(CookieContainer вроде и включен, но не получается...)
 

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
Перефразируя немного, можно ли как-то сделать так:
1. Открываем страницу в CEF.
2. Автоматически собираем всё, что там нагенерировалось в ответа.
3. Делаем POST запрос (или же даже банально через браузер) со всем тем что пришло в ответе - к другой странице.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
Но всё равно остался вопрос. Я конечно же понимаю, что нужно собирать данные от GET, потом переносить в этот POST. Это если делать полностью на запросах. Но мне это не особо обязательно, можно и через браузер.

Нет ли решения из коробки?

Т.е. сделать через инстанс браузера запрос к странице. Она загрузилась в браузер.
А потом простым кубиком, используя куки и всё остальное из браузера, получить этот ответ в JSON?
(CookieContainer вроде и включен, но не получается...)
Это нужно доставать трафик. Перед заходом на нужную страницу запускаете instance.UseTrafficMonitoring = true;, а потом анализируете (var traffic = instance.ActiveTab.GetTraffic();) , к сожалению сейчас нету времени показать более детально лично под вас заточенный снипет, но вот наброски.
C#:
// Включить перехват
instance.UseTrafficMonitoring = true;

// Получаем весь трафик в переменную
var traffic = instance.ActiveTab.GetTraffic();

// Перебор трафика
foreach (TrafficItem t in traffic)
{
    // Ищем url где есть слово request и достаем из него RequestCookies в логи если нашли
    if (t.Url.Contains("request"))
    {
        return t.RequestCookies;
    }
}
throw new Exception("Не нашли то что хотели");
 
  • Спасибо
Реакции: Ssmodey

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
129
Благодарностей
27
Баллы
28
Это нужно доставать трафик. Перед заходом на нужную страницу запускаете instance.UseTrafficMonitoring = true;, а потом анализируете (var traffic = instance.ActiveTab.GetTraffic();) , к сожалению сейчас нету времени показать более детально лично под вас заточенный снипет, но вот наброски.
C#:
// Включить перехват
instance.UseTrafficMonitoring = true;

// Получаем весь трафик в переменную
var traffic = instance.ActiveTab.GetTraffic();

// Перебор трафика
foreach (TrafficItem t in traffic)
{
    // Ищем url где есть слово request и достаем из него RequestCookies в логи если нашли
    if (t.Url.Contains("request"))
    {
        return t.RequestCookies;
    }
}
throw new Exception("Не нашли то что хотели");

Спасибо большое, но наверное всё же буду делать через скролл... Я не очень понимаю C#, точнее вообще его не понимаю. Разве что на уровне - Вы забыли одну } (это не в укор, просто может кто-то будет искать что-то по этой теме и ему понадобится).

Наверное всё же сначала нужно покурить C# для чайников, чем в это лезть))
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
Спасибо большое, но наверное всё же буду делать через скролл... Я не очень понимаю C#, точнее вообще его не понимаю. Разве что на уровне - Вы забыли одну } (это не в укор, просто может кто-то будет искать что-то по этой теме и ему понадобится).

Наверное всё же сначала нужно покурить C# для чайников, чем в это лезть))
Напишите в телеграм, если буду свободен, по удаленке попробую вам сделать.
 

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