【问题标题】:How to make the WebBrowser control pretend that it is a Firefox browser?如何让 WebBrowser 控件伪装成 Firefox 浏览器?
【发布时间】:2012-02-28 01:02:01
【问题描述】:

我正在使用一个 VB.NET 程序,该程序使用 WebBrowser 控件来浏览 Web。我需要导航到的网站突然变得对 IE 不友好。所以,我想尝试让网站看起来 WebBrowser 控件不是 IE,而是 Mozilla Firefox 浏览器。 我怎样才能做到这一点? 我可以更改控件发送的 HTTPrequest 标头吗?或类似的东西? 谢谢!

---------- 编辑 --------------

嗨,xxbbcc!谢谢你的大回答。 HttpWebRequest 是我剩下的唯一选择。我过去曾经使用过它,但我怀疑它是否适用于我需要的网站。

问题是 - 该网站使用大量脚本来构建网页,而必须单击的按钮实际上是一个链接,该链接会唤起脚本,然后进一步构建页面。最终的 HTML 代码正是我所需要的。

现在问题比我想象的还要复杂。在请求标头中指定什么用户代理绝对无关紧要(感谢 jfmags,我通过 Fiddler 找到了它)。似乎重要的是,在站点将浏览器重定向到 HTTPS 地址后,Firefox 继续发送 HTTP/1.1 请求,而 IE 开始发送 HTTP/1.0 请求,这就是它可能失败的原因。这是由网站所有者设计的。我在这里http://answers.microsoft.com/en-us/ie/forum/ie8-windows_other/how-to-force-ie-to-use-http11-over-ssl-through/360eca2d-e290-4078-ad37-7665bec706c4 在网上找到了关于此的讨论,但似乎还没有定论。我曾经使用 Mozilla ActiveX 控件,但现在它已经过时了,因为该项目已停止。

我所说的网站就是这个臭名昭著的site。

我知道,我是海盗,这很糟糕。通过下载一部电影,我可能会给一些巨大且非常富有的公司造成数百万美元的损失。但是我住的地方,根本买不到原声片,都被配音给坑了。那么,我还有哪些选择呢?我喜欢电影。

我会尝试看看 HttpWebRequest 是否可以解决这个问题。

【问题讨论】:

  • 谢谢,jfmags!我也快到了。不过,我不太擅长 C#。它在 VB.NET 中看起来如何?
  • 好的。我试过这个:WebBrowser1.Navigate(TextBox1.Text, "", Nothing, "User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:9.0.1) Gecko/20100101 Firefox/9.0.1")。不起作用,可能是因为网站重定向:(
  • 你确定这是 IE 的东西吗?您可以更改使用 Fiddler 发送的用户代理,以确保它可以解决问题。也许还有其他事情发生。
  • 是的 - 就是这样。如果你安装它,你可以在规则菜单下更改用户代理,看看响应是否改变。

标签: .net vb.net webbrowser-control


【解决方案1】:

您可以阅读 GeckoFX。它是一个类似于 WebBrowser 的控件,但它在 Gecko 引擎上运行(与 Firefox 运行相同的引擎)。

http://code.google.com/p/geckofx/

【讨论】:

    【解决方案2】:

    你不能。 Web 浏览器控件是 Internet Explorer。

    【讨论】:

      【解决方案3】:

      您可以更改请求标头以将浏览器控件伪装成 Firefox,但您将得到的响应将针对 Firefox,而不是针对 IE,因此 WebBrowser 控件可能无法正确呈现它。

      确实,WebBrowser控件就是IE。

      编辑:

      在您所说的评论中,您只需要页面的 HTML 来模拟该页面上的按钮单击。如果是这种情况,您可以尝试使用 HttpWebRequest/HttpWebResponse 对象向服务器发送/接收 HTTP 请求。您可以使用它们发送任何标头,以便您可以通过发送正确的标头轻松模拟任何浏览器。您可以使用 Fiddler 首先导航到该站点并将请求保存在 Firefox 中,然后使用来自这些请求的信息来构建您的 HttpWebRequest 对象。

      一旦您掌握了 HTML,您就可以对其进行解析并随心所欲地进行操作。如果您需要单击触发回发到服务器的按钮,您可以从 HTML 响应中解析相关数据,然后构建 POST 请求。 HttpWebRequest 可以在同步和异步模式下工作,因此您可以使用几行代码下载页面,也可以控制整个下载过程(这更复杂)。

      我知道这不是您最初询问的内容,但如果您实际上不需要显示页面内容,这可能更适合您。

      【讨论】:

      • 我其实需要一个网页HTML代码,不管它看起来如何。我需要点击网页上的一个按钮。
      • 正如我所见,在加载页面时,WebBrowser 会发送多个请求。如何在所有这些请求被分派之前更改它们的标头?
      • @GreenBear 我用详细信息更新了我的答案。如果您只需要下载一个页面来获取 HTML(而不是显示它),您最好不要使用 WebBrowser 控件。在这种情况下,HttpWebRequest 可能更适合您。如果我误解了您的需求,请告诉我。
      • 嗨,xxbbcc!谢谢!我在上面编辑了我的问题。反正也不是很清楚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多