0

我正在尝试自动搜索。

我正在使用 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”或点击它。

现在我手动输入搜索文本

4

1 回答 1

3

Google 为程序员提供了各种 api 供程序员免费试用,并以合理的成本长期和广泛使用。以下内容可能违反 google 使用条款,在此提供仅供学术讨论;)此外,这种解决方案通常是短暂的,因为它们容易受到所依赖内容的次要版本的影响。

这可能会变得很棘手,因为www.google.com似乎会根据调用的浏览器来响应不同的页面。我没有chromium安装,也无法检查它得到的响应,但是TWebBrowser(IE 11)得到的结果接近你的预期。

查看源代码(View source在 r-click 的弹出菜单中TWebBrowserView page source在 ...的 r-click 弹出菜单中Chrome)以验证元素类型和字段名称。

以下是基于TWebBrowser得到的响应,因为它回答了您的问题。

您正在页面中搜索具有值为的字段https://www.google.comhtml标签。但是这样的事情是不存在的!不在接收的页面中。AidbtnKTWebBrowser

您显然正在寻找这个:

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

如您所见,它是一个input标签,其name字段值为btnK

所以,修改你的代码,使第一行变成

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

第六行变成

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

事实上,当您调用click它时,它会激活搜索。


但你可以做得更简单。在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;
于 2019-05-06T10:08:31.753 回答