我正在尝试自动从网站下载报告(使用WebBrowser)。
我过去已成功完成报告,但现在发现自己必须从下拉列表中选择一个实体,以便为该实体生成新的报告表。我可以更改列表的索引,但不会生成我需要的报告表。
我使用Chrome上的“检查”功能来调试代码并查看表格的生成位置,但我对JavaScript的理解大约是3种不存在的阴影。
看来,当我点击该选项时,它会触发一个“onChange”事件,当我只选择选项时这是不会发生的(有意义)。所以,我试图手动触发这个onChange事件,但我承认这有点过头了。看起来我需要对JavaScript进行更多阅读,可能还需要阅读Delphi中的WebBrowser库。
我觉得我在Delphi,HTML和JavaScript之间的关系中缺少一个关键概念。我甚至不确定我是否可以通过Delphi发起事件(我需要找到一种模拟事件的方法,以便Listener将获取entityChanged事件)。我正在这里的心理圈试图绕过这个,我希望我错过了一些非常简单和基本的东西。
我的代码(打破了Element.FireEvent,再次通过调试确定的值):
procedure TForm3.runReport;
var
Document : IHTMLDocument2;
Element : IHTMLElement3;
begin
try
Document := Form3.WebBrowser1.Document as IHTMLDocument2;
Element := Document.forms.item('l4iHkfgk6Nk%3D_store_11157_6%2F18%2F2014%2012%3A00%3A00%20AM',NULL) as IHTMLElement3;
Element.FireEvent('entityChanged','Txxxxxxxxxxx (11157),l4iHkfgk6Nk=_store_11157_6/18/2014 12:00:00 AM,February 10 2017,entity');
except
rptSt := 1;
end;
end;
以下是我发现的有关选择的事件监听器的信息:
这是调试事件时调用的函数:
如果这里含糊不清,我会事先道歉;我试图尽可能清楚。