我试图从网站上搜集一些数据。我认为它使用ajax和javascript。我的代码将填写一个表单,然后单击下面的提交按钮:
ie.document.getelementbyid("form_field_id1").SetAttribute("value", "blah");
ie.document.getelementbyid("form_field_id2").SetAttribute("value", "blah");
ie.document.getelementbyid("form_field_id3").SetAttribute("value", "blah");
ie.document.getelementbyid("submit_button").InvokeMember("click);
然而,有时候,我会从网页上收到一条消息"弹出。我不确定,但似乎在我提交表格后发生。我不确定是什么导致这种情况,也许我快速填写表格两个。我可以按" OK"手动,然后手动提交表单,它似乎工作,这是一个可能的解决方法。我可以使用以下代码按"确定"
hwnd = FindWindow("#32770", "Message from webpage");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK");
SendMessage(hwnd, 0xf5, IntPtr.Zero, IntPtr.Zero);
我也可以尝试插入睡眠以减慢速度。
但是,以上都不奏效。即使我在填写表单的代码之后插入了一个睡眠(但在表单提交之前),我会看到页面暂停一段时间我睡觉(表单空白),然后一切都被填写并提交即刻。但是,如果我在所有代码之后放置一个永久循环,页面将永远挂起。
所有涉及填写表格或点击表格的代码都会在稍后或至少延迟发生
理想情况下,我希望我的代码可以执行以下操作:
例如:
ie.document.getelementbyid("form_field_id1").SetAttribute("value", "blah");
ie.document.getelementbyid("form_field_id2").SetAttribute("value", "blah");
ie.document.getelementbyid("form_field_id3").SetAttribute("value", "blah");
ie.document.getelementbyid("submit_button").InvokeMember("click);
// code to wait a minute or two and check if anything happened
hwnd = FindWindow("#32770", "Message from webpage");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK");
SendMessage(hwnd, 0xf5, IntPtr.Zero, IntPtr.Zero);
ie.document.getelementbyid("submit_button").InvokeMember("click);
更新: 我尝试将#34;消息从网页"将代码编入计时器并单击提交按钮。它看起来无穷无尽。出于某种原因,使用" ie.document.getelementbyid(" submit_button")。InvokeMember(" click)"似乎与我实际上点击提交按钮的行为不同。手动点击我自己时,它工作正常,但使用InvokeMember会导致错误。