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

Ssmodey

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

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

Есть сайт:

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

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

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

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

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

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

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

Возможно кто-нибудь подтолкнёт к решению?
 
сначала наводи мышку на нужный блок instance.ActiveTab.FullEmulationMouseMove(500,500); предварительно высчитав координаты внутри блока.
потом делай instance.ActiveTab.FullEmulationMouseWheel(0,100);
 
  • Спасибо
Реакции: DictorZetLBS и Ssmodey
а лучше посмотри запросы этого сайта. там в JSON данные передаются. проще собрать запросы и все данные уже в куче. ничего не надо с мышкой делать ;-)

116175
 
  • Спасибо
Реакции: Ssmodey
сначала наводи мышку на нужный блок instance.ActiveTab.FullEmulationMouseMove(500,500); предварительно высчитав координаты внутри блока.
потом делай instance.ActiveTab.FullEmulationMouseWheel(0,100);

СПАСИБО!!!
Всё оказывается очень просто. Я это пытался кубиком эмуляции мыши делать, а оказывается всё решается одной строчкой C# (даже координаты 500,500 подходят, что забавно). Пора учить C# (и тщательнее читать справку по нему) :-)

116182
 
а лучше посмотри запросы этого сайта. там в JSON данные передаются. проще собрать запросы и все данные уже в куче. ничего не надо с мышкой делать ;-)

Посмотреть вложение 116175

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

116184
 
  • Спасибо
Реакции: Ssmodey
А не могли бы Вы показать пример запроса к странице, который выдаёт JSON? (ну или хотя бы намекнуть где искать).
Вроде бы перерыл все постгеты, в упор не вижу нужного
Посмотреть вложение 116183
Откройте DevTools в зенно справа иконка над браузерным окном. Далее в network - перезагружаете страницу , далее во вкладке network - ctrl+f (поле поиска откроется), вбиваете значение в поле, которое ищите, нажимаете ентер. Далее смотрите в каких запросах есть ваше совпадение.
 
  • Спасибо
Реакции: Ssmodey
Откройте DevTools в зенно справа иконка над браузерным окном. Далее в network - перезагружаете страницу , далее во вкладке network - ctrl+f (поле поиска откроется), вбиваете значение в поле, которое ищите, нажимаете ентер. Далее смотрите в каких запросах есть ваше совпадение.
Вам так же спасибо!
По Вашей инструкции получилось найти POST запрос.
 
Но всё равно остался вопрос. Я конечно же понимаю, что нужно собирать данные от GET, потом переносить в этот POST. Это если делать полностью на запросах. Но мне это не особо обязательно, можно и через браузер.

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

Т.е. сделать через инстанс браузера запрос к странице. Она загрузилась в браузер.
А потом простым кубиком, используя куки и всё остальное из браузера, получить этот ответ в JSON?
(CookieContainer вроде и включен, но не получается...)
 
Перефразируя немного, можно ли как-то сделать так:
1. Открываем страницу в CEF.
2. Автоматически собираем всё, что там нагенерировалось в ответа.
3. Делаем POST запрос (или же даже банально через браузер) со всем тем что пришло в ответе - к другой странице.
 
Но всё равно остался вопрос. Я конечно же понимаю, что нужно собирать данные от 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
Это нужно доставать трафик. Перед заходом на нужную страницу запускаете 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# для чайников, чем в это лезть))
 
Спасибо большое, но наверное всё же буду делать через скролл... Я не очень понимаю C#, точнее вообще его не понимаю. Разве что на уровне - Вы забыли одну } (это не в укор, просто может кто-то будет искать что-то по этой теме и ему понадобится).

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

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