查找 URL 响应?默认 WebBrowser 控件的替代方案?

Posted

技术标签:

【中文标题】查找 URL 响应?默认 WebBrowser 控件的替代方案?【英文标题】:Find URL Responses? Alternative To Default WebBrowser Control? 【发布时间】:2012-11-08 20:08:10 【问题描述】:

大家好,过去几周我有一个问题困扰着我。

我想要完成的工作:我需要一个能够更改用户代理(在启动时一次)和引用者的网络浏览器控件。但最重要的是查看 url 响应的能力。我的意思是,例如,如果您导航到一个网站,您会返回图像/javascripts 文件/动态 URL 作为响应,我需要访问其中一些具有动态变量的那些 url(常规 Web 浏览器控制不会向您显示这些并且您可以除了使用 fiddler core 之外,不要以任何方式访问它)。

我可以通过 webbrowser + fiddlercore 做到这一点,我可以看到这些 url 地址并可以做任何事情。问题是如果你运行这个程序的几个实例(或者有时如果程序有一些自动化来处理 url 响应)它会卡住或不起作用。我尝试修复它并使其工作,但这是一种无法正常工作的 hacky 解决方案。我需要一种简单的方法来访问这些 url,就像你使用 httpwebrequest 一样,但是作为一个 webbrowser。为什么我需要它作为网络浏览器?我的工作方式需要执行所有跟踪像素、脚本和图像等。httpwebrequest 中的普通 webbrowser 行为你不能只是导航,所有脚本都将作为 webbrowser 执行,或者你可以吗?

【问题讨论】:

【参考方案1】:

在 WinForms 应用中使用 System.Windows.Forms.WebBrowser 控件,将 webBrowser.URL 属性设置为您感兴趣的页面的 URL。

网页浏览器的 DocumentCompleted 事件在页面加载后触发。任何动态加载的 JavaScript 都应该在那时完成。挂钩 DocumentCompleted 事件并使用 webbrowser.Document.Images 获取页面上所有图像元素的列表。从这些图像中,您可以获取它们的 SRC 属性,其中包含它们的 URL,包括任何挂在末尾的查询参数。您可以使用 webbrowser.Document.Links 获取页面上所有超链接的列表。对于其他感兴趣的 html 元素,您可以使用 GetElementsByTagName("foo") 从页面中获取具有该标签名称的所有元素,然后挖掘它们的属性以提取 URL 属性。

使用 webbrowser.Document,您可以访问任何 HTML 元素,无论是静态创建的还是动态创建的。

您无法通过 webbrower.Document 获得的是使用 XMLHttpRequest() 异步加载的数据,因为该数据不是浏览器文档对象模型的一部分。带有脚本错误按钮的网页将难以拦截。

但是,如果您知道页面上执行的 JavaScript 将数据存储在何处,则可以使用 webbrowser.Document.InvokeScript() 访问它。例如,如果页面上的 JavaScript 将 URL 存储在 window 对象的 mydata 属性中,您可以尝试使用 webbrowser.Document.InvokeScript("window.mydata") 或一些变体来将 mydata 的值检索到 C# 应用程序中。

【讨论】:

我需要结果,我的意思是当我主动导航和使用 webbrowser 控件时,这些 url 是动态的。响应 url 将在 url 中包含动态变量,我需要那些我需要的变量,我需要 html 文件等...

以上是关于查找 URL 响应?默认 WebBrowser 控件的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

WebBrowser控件默认使用IE9,IE10的方法

关于python的webbrowser

C# winform webbrowser 自动登录网站?

VB,webbrowser,如何禁止网页弹窗?

Windows Server 2008 R2 域控服务器运行nslookup命令默认服务器显示 UnKnown

WebBrowser 控件和 JavaScript 错误