【发布时间】:2017-03-29 21:55:43
【问题描述】:
我正在尝试导航到 REST API,但是网页的所有者在 REST API URL 前面插入了一个 HTML 消息页面。因此,当我向 REST API 发出请求时,我没有返回我请求的 XML 文件,而是返回了一个 HTML 页面,其中包含一些信息性消息,并且需要单击按钮来确认该消息。
使用 Fiddler 检查按钮本身时,没有显示 onclick 事件:
<div class="dialog-buttons">
<button id="frmMessages:btnAcknowledge" name="frmMessages:btnAcknowledge" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="" title="Acknowledge and continue" type="submit">
<span class="ui-button-text ui-c">OK</span>
</button>
</div>
我无法直接导航到单击按钮向您发送的页面,因为它不会将您发送到任何地方,它只是确认您单击了按钮并关闭消息。
我正在尝试模拟此按钮单击。我尝试使用 System.Windows.Forms.WebBrowser 类,但我无法将我的 resultContent 加载到浏览器中,DocumentText 属性仍然为空,所以当我尝试调用按钮单击时,我得到一个空引用异常.
handler = new HttpClientHandler();
handler.CookieContainer = cookies;
handler.AllowAutoRedirect = false;
using (var client = new HttpClient(handler)){
string resultContent = result.Content.ReadAsStringAsync().Result;
System.Windows.Forms.WebBrowser b = new System.Windows.Forms.WebBrowser();
b.Navigate("about:blank");
HtmlDocument doc = b.Document;
doc.Write(string.Empty);
b.DocumentText = resultContent;
var resp = b.Document.GetElementById("frmMessages:btnAcknowledge").InvokeMember("onclick");
}
在我看来,网页的所有者通过在 REST API 调用前面插入 HTML 消息页面,在这里搞砸了一些事情,我已经联系了他们,但是从现在到他们可以修复它(如果这对他们来说是个问题)我需要一种绕过此消息框的方法。
【问题讨论】:
-
你试过
doc.Write(resultContent)吗? -
HttpClient 不与任何类型的用户界面相关联,因此它不能直接模拟任何用户输入事件。我会在浏览器中玩耍并检查单击按钮时是否有任何网络活动,但您很遗憾它不会“将您发送到任何地方”。如果在浏览器中刷新页面,是不是每次都要重新点击按钮?
-
@MihalyBalas 关于 HttpClient 你是对的,这就是我尝试使用 WebBrowser 类的原因。检查浏览器活动,我首先被发送到登录页面,然后重定向到我的初始请求 URL,但是在我从登录页面返回后,我收到了 HTML 消息。我联系了负责该页面的 IT 部门,他们看到了同样的问题并正在调查它。确认消息框后,尝试在浏览器中查看 REST Web 服务时出现 403 错误。如果我重新加载此页面,我会收到相同的 403 错误。如果我重新加载消息页面,我会得到相同的消息框。