Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2013, 08:18   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Программное управление TWebBrowser

Добрый день. Есть код:

Код:
var
  Main: TMain;
  Data:Variant;

implementation
uses MSHTML;
(*загрузка Гугля*)
procedure TMain.Button1Click(Sender: TObject);
var
SmUrl,HtmlCode:string;
Flags, TargetFrameName, PostData, Headers: Olevariant;
Document:IHTMLDocument2; (*Перем типа*)
begin
  Wbbr.Navigate(Edit1.Text, Flags, TargetFrameName, PostData, Headers);
  Document:=Wbbr.Document as IHTMLDocument2;
  if Assigned(Document) then               
  HtmlCode:=Document.body.innerHtml;
  Memo1.Text:=HtmlCode;
end;

(*находим форму ввода поисковых слов и вводим их*)
procedure TMain.Button2Click(Sender: TObject);
var
I,J:integer;
begin
  for I := 0 to (Wbbr.OleObject.Document.forms.Item(0).Elements.Length-1) do
    begin
      if Wbbr.OleObject.Document.Forms.Item(I).Elements.Name='f' then
        Data:=Wbbr.OleObject.Document.Forms.Item(I).Elements;
        Break;
    end; (*находим нужную форму по имени*)

  for J := 0 to (Data.Length-1) do
    begin
      if (Data.Item(J).Name='q') then Data.Item(J).Value:=Edit2.Text;
    end;  (*копируем в строку ввода на странице символы из ЕДИТ2*)

end;

(*находим кнопку начать поиск и программно жмем ея*)
procedure TMain.Button3Click(Sender: TObject);
var J:integer;
begin
  for J := 0 to (Data.Length-1) do
    begin
      if (Data.Item(J).value='Поиск в Google') then
      //(Wbbr.Document as IHTMLDocument2).ParentWindow.Focus;
      Data.Item(J).Click;
    end;
end;
Практически все работает, но если после нажатия на Батон2 не кликнуть на ТВебБраузер мышью, то при нажатии на Батон3 загрузка страницы не присходит
Если кто в курсе, скажите что не так еще.
Pcrepair вне форума Ответить с цитированием
Старый 19.04.2013, 09:34   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Что уже и браузер не может пропарсить гогльмогль? фигово жить без пистолета..
возвращайтесь ка вы в прошлую тему и внимайте тому что там сказали.
а эту ахинею комментировать, себе дороже.
eval вне форума Ответить с цитированием
Старый 19.04.2013, 15:12   #3
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Если нужен результат не проще общаться с интернетами по средствам http запросов, без участия webbrowser, а затем уже парсить ответ, либо же загрузить результирующую страницу в webbrowser для отображения?
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 19.04.2013, 18:03   #4
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

и где тут парсить гогольмоголь? хугль тут просто в качестве примера использован, как самый кривой вариант. и при чем тут прошлая тема, не имеющая к этой никакого отношения?

нет не проще. и результат тут не причем. вопрос о том как управлять компонентом ТВебБраузер ПРОГРАММНО!!! а не о чем то другом

ответ на вопрос случайно некто знает?
Pcrepair вне форума Ответить с цитированием
Старый 19.04.2013, 18:58   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Ну не нужен для этой задачи TWebBrowser.
Вы картошку ложкой чистите?

Код:
uses
  strutils;
...
function extract(const text, begin1, end1: string; var Pos1: integer): string;
var
  startpos, endpos: integer;
begin
  result := '';
  startpos := PosEx(begin1, text, Pos1);
  if startpos < 1 then
  begin
    Pos1 := -1;
    exit;
  end;
  inc(startpos, length(begin1));
  endpos := PosEx(end1, text, startpos);
  if endpos < 1 then
  begin
    Pos1 := -1;
    exit;
  end;
  Pos1 := endpos + length(end1);
  result := Copy(text, startpos, endpos - startpos);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s, tmp, res: string;
  j: integer;
begin
  s := IdHTTP1.get(IdHTTP1.URL.URLEncode
      ('http:\\www.google.ru\search?q=' + Edit1.text));
  j := 1;
  res := 'Google:' + #13#10;
  tmp := extract(s, 'url?q=', '&amp;sa', j);
  while j <> -1 do
  begin
    if pos('webcache.googleusercontent.com', tmp) = 0 then
      res := res + tmp + #13#10;
    tmp := extract(s, 'url?q=', '&amp;sa', j);
  end;
  Memo1.text := res;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.04.2013, 23:46   #6
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

BDA, спасибо за подсказку, если кое что доработать то код работает и получается вытянуть 20 УРЛ из хугли
НО!!! а как же остальные? те которые на 2-3-4-5-6-7 и далее страницах?
вот как их вытащить? желательно получить хотябы первые 100 УРЛ рейтинга из ПМ
собственно идея была приискать ссылки с именами 2-3-4 и далее и программно на них кликнуть, в общем полная иммитация работы человека, к тому рано или поздно все равно будет БАН и соотвественно нужно будет ввести капчю и как это сделать если загрузчик на ИНДИ?

в общем вопрос остался: почему не удается нажать программно кнопку "Поиск в Google" в странице поиска. вроде все как в букваре, но только вначале почемуто нужно кликнуть по ТВБР, иначе передачи запрса в ПМ не получается
Pcrepair вне форума Ответить с цитированием
Старый 20.04.2013, 01:55   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Гуглу, похоже, "фиолетово", человек клацает по ссылкам или программа - главное, количество запросов.
http://programmersforum.ru/showthread.php?t=229716 - вот в этой теме код авторизации на форуме с каптчей (вывод каптчи в отдельное окно) - на IdHTTP и Synapse.
Цитата:
приискать ссылки с именами 2-3-4 и далее и программно на них кликнуть
И после этого Вы утверждаете, что мы не в теме

У ссылки (поискового запроса) есть параметр start.
Например, https://www.google.ru/search?q=edit&start=10 - вторая страница поиска по слову edit.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.04.2013, 02:08   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Ну не нужен для этой задачи TWebBrowser.
Вы картошку ложкой чистите?
Ну не хочет человек головой подумать....

Цитата:
Практически все работает, но если после нажатия на Батон2 не кликнуть на ТВебБраузер мышью, то при нажатии на Батон3 загрузка страницы не присходит
Если кто в курсе, скажите что не так еще.
Вот по этому веб-браузер вам нафиг не нужен.

Чтобы загрузка была, надо поставить на браузер фокус а потом кликать что вам надо.
Код:
WebBrowser1.SetFocus; //Ставим фокус
Button3.Click; //Жмем 3ю кнопку
Многопоточно это работать не будет, не потому что веб-браузер кривой, а потому что фкус можно поставить только 1 раз только на 1 элемент управления. 2 фокуса в системе не предусмотрено. Многопоточность - БОЛТ. Несколько копий программы на экране - БОЛТ. Работа юзера пока работает программа - БОЛТ.
Знаем, проходили...

Цитата:
НО!!! а как же остальные? те которые на 2-3-4-5-6-7 и далее страницах?
Берется сниффер, смотрим-с, какой запрос передается на сервер чтобы получить новую страницу.
НО, перед этим вы должны так же из исходника забрать возможные страницы для текущей страницы(на первой странице вы видите переходы с 1 по 10, а на 2, с 2 по 11) получается, что с каждой страницей нужно обновлять кол-во возможных страниц в запросе.

Далее гугл измеряет страницы не номерами а количество отображаемых ссылок.
Если у меня 10 ссылок на страницу, то для перехода на 2 страницу надо сложить 10+10 и послать запрос.

Цитата:
к тому рано или поздно все равно будет БАН
Для этого есть прокси-сервера.

Цитата:
и соотвественно нужно будет ввести капчю
Для этого есть сервис антигейт и подобные ему.

Цитата:
и как это сделать если загрузчик на ИНДИ?
Берете сниффер, получаете страницу с капчей, в сниффере смотрите откуда выпадает прямая ссылка на изображение капчи или как она формируется(обычно js кодом). Если там JS код, то эмитируете его действия и сами формируете ссылку, иначе все проще: ищем ссылку, загребаем, отправляем на антигейт - получаем результат.

Как вам уже сказали - Веб-браузер нафиг не нужен

Последний раз редактировалось Человек_Борща; 20.04.2013 в 02:10.
Человек_Борща вне форума Ответить с цитированием
Старый 20.04.2013, 07:28   #9
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Бан в гугле? Ахаха. Десятки запросов в день ввожу, ни разу капчу не видел. Хотя бытует мнение, что существует избранный, который сломал Интернет и его затем забанили в гугле, чтобы больше не ломал.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 20.04.2013, 09:57   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Ну не хочет человек головой подумать....
это пол беды, но он еще и огрызается, типа мол все дураки, а он видители не парсит..
дет.сад на выезде
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программное управление кэшем Sibedir Операционные системы общие вопросы 3 02.03.2013 16:34
Программное нажатие кнопки в TWebBrowser RIO Работа с сетью в Delphi 3 16.07.2011 22:27
Программное управление светодиодом Jacobson Общие вопросы Delphi 5 14.05.2010 23:02
Сервис - программное управление. Air Win Api 3 23.06.2008 13:09