提问人:John 提问时间:5/5/2019 更新时间:5/6/2019 访问量:795
在德尔福搜索自动化?
Search automation in delphi?
问:
我正在尝试自动搜索。
我正在使用 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”或单击它。
现在,我正在手动输入搜索文本
答:
Google 提供了各种 API 供程序员免费试用,并且长期和广泛使用的合理成本。以下内容可能违反谷歌使用条款,此处提供仅供学术讨论;)此外,这种解决方案通常是短暂的,因为它们容易受到所依赖内容的次要版本的影响。
这可能会变得棘手,因为似乎会根据哪个浏览器调用不同的页面进行响应。我没有安装,也无法检查它得到的响应,但(IE 11)得到了接近您期望的东西。www.google.com
chromium
TWebBrowser
查看源(在 的 r-click 弹出菜单中,在 ...) 的 r-click 弹出菜单中)以验证元素类型和字段名称。View source
TWebBrowser
View page source
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
btnK
因此,修改代码,使第一行变为
thelink:= WebBrowser1.OleObject.Document.all.tags('input');
第六行变为
if Pos('btnK', thelink.Item(x).name) > 0 then
事实上,当您调用它时,它会激活搜索。click
但你可以做得更简单。在搜索字段中输入某些内容(例如“Delphi”)后查看 URL。对我来说,它看起来像下面:https://www.google.com
https://www.google.com/search?q=delphi&rlz=1C1Y...
该部分是有趣的部分(它可能不是紧跟在问号之后,而是在 URL 中)。'q=delphi'
因此,您可以简单地使用一个编辑框来输入要搜索的单词,并使用网络浏览器来显示结果
procedure TForm1.Button1Click(Sender: TObject);
const
search = 'https://www.google.com/search?q=';
begin
WebBrowser1.Navigate(search + Edit1.Text);
end;
评论