如何处理"来自网页的消息"立即弹出并执行语句

时间:2017-11-24 21:30:23

标签: c# internet-explorer

我试图从网站上搜集一些数据。我认为它使用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);

我也可以尝试插入睡眠以减慢速度。

但是,以上都不奏效。即使我在填写表单的代码之后插入了一个睡眠(但在表单提交之前),我会看到页面暂停一段时间我睡觉(表单空白),然后一切都被填写并提交即刻。但是,如果我在所有代码之后放置一个永久循环,页面将永远挂起。

所有涉及填写表格或点击表格的代码都会在稍后或至少延迟发生

理想情况下,我希望我的代码可以执行以下操作:

  1. 点击提交
  2. 等一两分钟,看看导航是否已经发生
  3. 如果不是,请检查网页"中的"消息,按确定,然后再次点击提交
  4. 例如:

    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会导致错误。

0 个答案:

没有答案