ano*_*ery 9 c# ajax screen-scraping webbrowser-control
我正在尝试自动化我们的一些流程,一个包括登录外部网页,单击链接以展开详细信息,然后获取显示的所有详细信息.
我已经登录了该进程,并且可以在扩展后获取所有详细信息.
问题在于点击链接.链接定义如下(我删除了该Submit方法实际执行的操作,因为代码很长并且可能无关紧要.显然,img占位符就是一个例子):
<a id="form:SummarySubView:closedToggleControl" onclick="A4J.AJAX.Submit(...); return false;" href="#">
<img ... />
</a>
Run Code Online (Sandbox Code Playgroud)
我使用以下数据:
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = (WebBrowser)sender;
HtmlElement expandDetails = browser.Document.GetElementById("form:SummarySubView:closedToggleControl");
//When open ID for element is "form:SummarySubView:openToggleControl"
if(expandDetails == null) //If already expanded
{
//Stuff
}
else
{
expandDetails.InvokeMember("click"); //Click on element to run AJAX
}
}
Run Code Online (Sandbox Code Playgroud)
在运行时,expandDetails.InvokeMember("click"); browser_DocumentCompleted会按预期再次调用,但文档与之前相同,并expandDetails再次使用"已关闭"ID进行查找.这意味着我所寻找的细节从未显示过.
在AJAX脚本正确运行后如何访问文档?
添加Timer延迟检查文档似乎没有奏效.
所以一个非常简单的解决方案似乎有效.我的代码现在看起来像:
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = (WebBrowser)sender;
HtmlElement expandDetails = browser.Document.GetElementById("form:SummarySubView:closedToggleControl");
//When open ID for element is "form:SummarySubView:openToggleControl"
if(expandDetails == null) //If already expanded
{
//Stuff
}
else
{
expandDetails.InvokeMember("click"); //Click on element to run AJAX
while (expandDetails != null)
{
expandDetails = browser.Document.GetElementById("form:SummarySubView0:closedToggleControl");
Application.DoEvents();
System.Threading.Thread.Sleep(200);
}
//Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
所以运行while循环对我的情况很好.
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |