【问题标题】:How to simulate a button click using HttpClient如何使用 HttpClient 模拟按钮单击
【发布时间】: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 错误。如果我重新加载消息页面,我会得到相同的消息框。

标签: c# .net rest web


【解决方案1】:

网站的所有者最终解决了这个问题。我一直无法找到解决此问题的方法,但问题已得到解决。

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多