Автоматизация поиска в Delphi? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь автоматизировать поиск.

Я использую google.com для поиска, имя кнопки поиска - btnk.

Я гуглил и нашел ниже код нажимающей кнопки:

procedure TForm1.Button1Click(Sender: TObject);  
var  
x: integer;  
thelink: OleVariant;  
begin  
thelink:= WebBrowser1.OleObject.Document.all.tags('A');  
if thelink.Length > 0 then  
  begin  
  for x := 0 to thelink.Length-1 do  
    begin  
    if Pos('btnK', thelink.Item(x).id) > 0 then
      begin  
        thelink.Item(x).click;  
        Break;
      end;
    end;
  end;
end; 

но код не находит 'btnK' или не нажимает на него.

сейчас я вручную ввожу поисковый текст

1 Ответ

3 голосов
/ 06 мая 2019

Google предоставляет различные API-интерфейсы для программистов, чтобы использовать их бесплатно и за разумные деньги для длительного и широкого использования.Следующее может противоречить условиям использования Google и предоставлено здесь только для академического обсуждения;) Кроме того, решения такого типа обычно недолговечны, поскольку они уязвимы для незначительных выпусков контента, на который они полагаются.

Это может быть сложно, поскольку www.google.com, кажется, отвечает разными страницами, в зависимости от того, какой браузер звонит.Я не установил chromium и не могу проверить, какой ответ он получает, но TWebBrowser (IE 11) получает что-то близкое к тому, что вы ожидаете.

Посмотрите на источник (View source во всплывающем меню r-click TWebBrowser, View page source во всплывающем меню r-click Chrome ...), чтобы проверить типы элементов и имена полей.

Следование основано на ответе, который получает TWebBrowser, поскольку он отвечает на ваш вопрос.

Вы ищете на странице https://www.google.com тег html A с полем id чье значение btnK.Но такой вещи не существует!Не на странице, которую получает TWebBrowser.

Вы, очевидно, ищете это:

<input value="Google Search" aria-label="Google Search" name="btnK" type="submit">

Как видите, это тег input с полем name whosзначение равно btnK

Итак, измените ваш код так, чтобы первая строка стала

  thelink:= WebBrowser1.OleObject.Document.all.tags('input');

, а шестая строка стала

    if Pos('btnK', thelink.Item(x).name) > 0 then

и действительно, она активироваласьпоиск, когда вы звоните click на нем.


Но вы можете сделать это проще.Посмотрите URL-адрес после того, как вы ввели что-то (скажем, «Delphi») в поле поиска https://www.google.com.Для меня это выглядит следующим образом:

https://www.google.com/search?q=delphi&rlz=1C1Y...

Интересная часть 'q=delphi' (она может быть не сразу после знака вопроса, а дальше в URL).

Таким образом, вы можете просто иметь поле для ввода слова для поиска и веб-браузер для отображения результата

procedure TForm1.Button1Click(Sender: TObject);
const
  search = 'https://www.google.com/search?q=';
begin
  WebBrowser1.Navigate(search + Edit1.Text);
end;
...