Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 WebBrowser - парсинг сайта  [new]
-Solo
Member

Откуда:
Сообщений: 20
Паршу билеты с сайта https://www.stoloto.ru/ruslotto/game?draw=1264
После парсинга нажимаю на ссылку обновить билеты и всё ок. Но если запустить сразу две программы, то одновременно обновлять билеты будет только одна, хотя если зайти на сайт через браузер и открыть 1 программу, то одновременно обновлять получается. Подскажите, можно ли что то сделать?
3 ноя 18, 16:31    [21723299]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3845
-Solo,

браузер не нужен вообще... Там два запроса одних и тех же запроса:
https://www.stoloto.ru/services/site/game/pregen/ruslotto/take

В первый раз вызывается команда на генерацию, во второй раз -- получается результат. И возвращает все данные по билетам. Поэтому рекомендую разобраться в процессе генерации/работы (браузер в режиме отладки по F12 отлично в этом поможет), а потом уже смотреть.

К сообщению приложен файл. Размер - 10Kb
3 ноя 18, 17:19    [21723322]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3845
Так же см. на куки -- там хранится некий идентификатор "игрока". Если их "нагенерить", то наверняка можно и в потоке сразу кучу раз вызывать команды и получить разные результаты (подставляя куки под каждый запрос в отдельности).

К сообщению приложен файл. Размер - 10Kb
3 ноя 18, 17:23    [21723323]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3845
И вообще, там отдельная команда есть:
https://www.stoloto.ru/services/site/game/pregen/ruslotto/change

Вызывается... ждем какое-то время... и еще раз вызываем для забора результата. И всё это с разными player id.
3 ноя 18, 17:28    [21723327]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
-Solo
Member

Откуда:
Сообщений: 20
т.е. мы берём, кидаем на форму IdHTTP,
добавляем заголовки запроса
+

Host: www.stoloto.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://www.stoloto.ru/ruslotto/game?draw=1264
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 22
Connection: keep-alive
Cookie: тут длинная строка

добавляем их
  for i := 0 to Memo2.Lines.Count - 1 do
    idHTTP1.Request.CustomHeaders.Add(Memo2.Lines[i]);


и отправляем POST запрос
procedure TFMain.sButton1Click(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TSTringList.Create;
  SL.Add('numbersToChange=%5B%5D');
  Memo1.Text := idHTTP1.Post('https://www.stoloto.ru/services/site/game/pregen/ruslotto/change', SL);
  FreeAndNil(SL);
end;


так?
3 ноя 18, 18:42    [21723352]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3845
Да, мысли верные... Надо только куки подставить как здесь написано. Скорее всего достаточно будет только Id подставить. А чтобы его получить, можно сделай предварительный запрос на сайт, получить этот ID и сохранить куда-нибудь (если планируется несколько программ/потоков одновременно запускать -- если нет, то они и сами запомнятся у idhttp).

Кроме того необходимо два раза отправлять запрос на change. С паузой. Сначала для начала генерации... пауза... потом на получение результата.
3 ноя 18, 18:57    [21723357]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
-Solo
Member

Откуда:
Сообщений: 20
т.е. если планируется запускать несколько программ, то ID для всех прог должен быть одинаковым?
и какую задержку выбрать, 1 сек. хватит?
3 ноя 18, 19:25    [21723367]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
-Solo
Member

Откуда:
Сообщений: 20
автор
Скорее всего достаточно будет только Id подставить.

всё верно
3 ноя 18, 19:41    [21723377]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3845
-Solo
т.е. если планируется запускать несколько программ, то ID для всех прог должен быть одинаковым?
и какую задержку выбрать, 1 сек. хватит?

Без понятия. Надо тестировать что получится, а от этого уже и отталкиваться. Возможно, там вообще паузы никакой не надо или, наоборот, по 10 секунд ждать и тогда быстрее будет новый id получить и номера под него.
3 ноя 18, 19:47    [21723379]     Ответить | Цитировать Сообщить модератору
 Re: WebBrowser  [new]
-Solo
Member

Откуда:
Сообщений: 20
Вроде работает. Сделал через сервер(ServerSocket1) и клиенты(ClientSocket1). При подключении клиента к серверу, тот отправляет запрос
idHTTP1.Get('https://www.stoloto.ru/ruslotto/game?draw=1264');
парсит Id и отправляет клиенту.

Спасибо за помощь JaDi!
3 ноя 18, 21:11    [21723425]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить