【问题标题】:Search automation in delphi?delphi中的搜索自动化?
【发布时间】:2019-05-04 18:56:49
【问题描述】:

我正在尝试自动搜索。

我使用 google.com 进行搜索,搜索按钮名称是 btnk。

我google了一下,发现点击按钮的代码如下:

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”或点击它。

现在我手动输入搜索文本

【问题讨论】:

  • 为什么要自动化 GUI 控件?为什么不直接发布请求?
  • 废话。如果浏览器可以检索它,您可以自己获取它。您只需要设置正确的用户代理。
  • @DavidHeffernan 先生,你能给我看一个 google.com 的例子吗?
  • "但是代码没有找到 'btnK' 或点击它。" - 请更具体地描述症状。

标签: delphi chromium google-search twebbrowser delphi-10.3-rio


【解决方案1】:

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

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

查看源(TWebBrowser 的右击弹出菜单中的View sourceChrome 的右击弹出菜单中的View page source ...)以验证元素类型和字段名称。

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

您正在页面https://www.google.com 中搜索html 标签A,其字段为id,其值为btnK。但是这样的事情是不存在的!不在TWebBrowser 接收的页面中。

你显然在寻找这个:

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

如您所见,这是一个带有name 字段的input 标签,其值为btnK

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

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

第六行变成了

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

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


但是你可以做的更简单。在https://www.google.com 的搜索字段中输入某些内容(例如“Delphi”)后查看 URL。对我来说,它看起来如下:

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;

【讨论】:

  • 谢谢先生。我试过了,但没有显示结果。这对我不起作用。不是 api,而是您答案的另一个 ole 版本
  • @John 你需要具体说明什么...对我不起作用。那么,你到底尝试了什么?
猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
相关资源
最近更新 更多