Javascript 下载由脚本生成的html

Javascript 下载由脚本生成的html,javascript,delphi,download,Javascript,Delphi,Download,如果我手动点击button1,然后点击button2,我会得到整个html代码(410 KiB)。然而,如果我尝试用下面的代码自动化这个过程,我只得到了它的一部分,没有javascript生成的html(40kib) 是的,我试着把form1.Button2.Click;OnDocument完成了,但仍然只写了40千磅。还有什么方法可以等待javascript的执行吗 注意:不要把这个代码看得太重。我只是想用一个简单的脏示例代码了解一些东西 procedure TForm1.Button1Cli

如果我手动点击
button1
,然后点击
button2
,我会得到整个html代码(410 KiB)。然而,如果我尝试用下面的代码自动化这个过程,我只得到了它的一部分,没有javascript生成的html(40kib)

是的,我试着把form1.Button2.Click;OnDocument完成了,但仍然只写了40千磅。还有什么方法可以等待javascript的执行吗

注意:不要把这个代码看得太重。我只是想用一个简单的脏示例代码了解一些东西

procedure TForm1.Button1Click(Sender: TObject);
begin

  form1.EmbeddedWB1.Navigate('https://www.themoviedb.org/movie/87101-terminator-genisys/posters');

  while EmbeddedWB1.ReadyState < READYSTATE_COMPLETE do Application.ProcessMessages;

  form1.Button2.Click;

end;

procedure TForm1.Button2Click(Sender: TObject);
var Doc: IHtmlDocument2;
begin

  Doc := EmbeddedWB1.Document as IHtmlDocument2;
  Memo1.Lines.Text := Doc.body.innerHTML;
  memo1.Lines.SaveToFile('C:\...\MoviePosters.html');

end;
procedure TForm1.按钮1点击(发送方:TObject);
开始
form1.EmbeddedWB1.Navigate('https://www.themoviedb.org/movie/87101-terminator-genisys/posters');
而EmbeddedWB1.ReadyState
以下内容——请注意,我使用的是香草TWebBrowser,而不是TEmbeddedWB——似乎满足了您的要求,至少针对特定的URL。它完全基于对ProgressChange事件的观察,我没有在任何其他URL上测试过它。希望有人能给你一个更通用、更不脆弱的解决方案

procedure TForm1.LogHTML;
var
  Doc: IHtmlDocument2;
begin
  Memo1.Lines.Clear;
  Doc := WebBrowser1.Document as IHtmlDocument2;
  if (Doc <> Nil) and (Doc.body <> Nil) then
    Memo1.Lines.Text := Doc.body.innerHTML;
  Caption := Format('Length: %d', [Length(Memo1.Lines.Text)]);
end;

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
    ProgressMax: Integer);
begin
  if (Progress = 0) and (ProgressMax = 0) then
    LogHTML;
end;
过程TForm1.LogHTML;
变量
文件:IHtmlDocument2;
开始
备忘录1.线条清晰;
Doc:=WebBrowser1.作为IHtmlDocument2的文档;
如果(无文件)和(无正文文件),则
Memo1.Lines.Text:=Doc.body.innerHTML;
标题:=格式('Length:%d',[Length(Memo1.Lines.Text)];
结束;
步骤t用于M1.WebBrowser1程序更改(发送方:ToObject;进度、,
ProgressMax:整数);
开始
如果(ProgressMax=0)和(ProgressMax=0),则
LogHTML;
结束;
当然,JS可能会一直写入文档,因此您可能希望使用TTimer的OnTimer事件来重新读取文档的HTML

顺便说一句,我意识到您只是在代码中“胡闹”,但避免在TForm1的方法中引用Form1的方法
TForm1
是一个类,而
Form1
是它的一个特定实例,它可能是在执行
TForm1
方法时创建的,也可能不是,而这一关键性差异最终会影响到你。假设您使用的
TForm1
的实际实例是
MyOtherForm