【问题标题】:How to execute a javascript function on TIDHttp (indy) delphi?如何在 TIDHttp(indy)delphi 上执行 javascript 函数?
【发布时间】:2017-01-03 10:46:33
【问题描述】:

我有一个 TIDHttp (Indy) 组件,它检索一个网站,从中获取要解析的 html 文本,并将收集到的数据显示为 delphi 表单。

代码运行良好,但是当找到超过 10 条记录时,网站会显示一个指向 Next() javascript 函数的链接,该函数会加载接下来的 10 条记录,依此类推。

我可以用 TIDHttp 做些什么来执行 next() 函数吗?

我用来检索 html 文本的代码如下:

procedure TForm1.ObtemStringsCorreio(aParamEntrada:string; var aRetorno:TStringList);
var
    _ParamList : TStringList;
begin
    _ParamList := TStringList.Create;

    _ParamList.Add('cepEntrada=' + aParamEntrada);
    _ParamList.Add('tipoCep=ALL');
    _ParamList.Add('cepTemp=');
    _ParamList.Add('metodo=buscarCep');

    try
        aRetorno.Text := idhtp1.Post(cEngineCorreios, _ParamList);
        mmo1.Lines.Clear;
        mmo1.Text :=  aRetorno.Text;
    finally
        _ParamList.Free;
    end;
end;

【问题讨论】:

  • 您似乎正试图从网站上抓取内容。您确定没有可用的 API 可以让您直接访问数据吗?抓取是不得已而为之的方法,网站所有者通常不鼓励这种方法,而且它天生就很脆弱。
  • 感谢您的回答。我已经读过那些帖子了。他们使用非官方的“Correios”数据库,“Correios”不提供网络服务。
  • 您无法使用 Indy 执行 Javascript。您必须下载并解析 HTML 和 Javascript 以确定单击按钮时脚本将生成哪种 HTTP 请求(或者,只需自己分析 HTML/Javascript,然后将行为硬编码到您的代码中),然后您可以使用 Indy 发送新的 HTTP 请求以检索下一批数据。

标签: javascript delphi indy execution idhttp


【解决方案1】:

Indy 是一个通信库。它没有任何用于客户端脚本执行的方法。您将需要为此使用另一个库。

无头浏览器将是理想的解决方案。更重量级的解决方案是将浏览器嵌入隐藏形式,并让它完成工作。为此,您可以使用TWebBrowser、Chromium 等。

【讨论】:

  • 感谢您的回答。你认为我必须模拟点击链接按钮吗?能具体一点吗?
  • 如果您希望按钮后面的代码执行,那么可以,假装单击该按钮将是实现此目的的好方法。
猜你喜欢
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2020-08-21
  • 2011-12-28
相关资源
最近更新 更多