1

希望这不会太痛苦...

我正在尝试从 webbrowser 控件访问网站,我尝试了两种方法(实际上,更多来自谷歌搜索的混合结果)存在以下问题:

 URL = "http://username:password@thewebsite.com"
 WebBrowser1.Navigate(URL)

1:此方法导致弹出安全窗口,要求我登录公司代理。我想这是因为我正在使用网站的用户名/密码,并且 URL 导航正试图将其输入到代理?

如果我尝试通过这样做来自动化/避免代理位:

Dim Headers As String = "Proxy-Authorization: Basic " & Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("USERNAME:PASSWORD"))
WebBrowser1.Navigate(URL, "", Encoding.Unicode.GetBytes(String.Empty), Headers)

我仍然遇到失败,因为无论如何都会弹出代理登录框。

2:如果我直接访问网站而不编辑 URL:

 URL = "http://thewebsite.com"
 WebBrowser1.Navigate(URL)

然后它把我带到一个完全没有任何代理消息的网站(太棒了!)但是网站会弹出一个我需要填充的登录框。可悲的是,我无法为此(自动化)获取任何元素ID,因为它是在 webbrowser 控件之外弹出的窗口窗体,我似乎无法询问它或弄清楚如何输入它。

有人对我接下来应该尝试什么有任何想法吗?有没有办法从方法 2 中获取登录表单来填充自己或至少让我查看该页面的源代码?在正确填充之前,我无法点击离开它。

我似乎无法得到任何可以为我处理两种登录表单的工作,它要么是一个,要么是另一个。(这两种形式看起来都像 Windows 标准登录提示,它们没有内置在网页中)。谢谢

4

1 回答 1

1

您需要实现一个自定义浏览器控制站点,支持IServiceProvider并提供IAuthenticate作为服务。IAuthenticate浏览器控件将在需要登录凭据时回调您的实现。

以下 q/a 可能会帮助您入门,尽管代码是在 C# 中:

访问文件夹[保留原始拼写]时,WEBbrowser 控件验证不起作用。

实现 IDispatch::Invoke 以由 WebBrowser 控件调用

[编辑]更具体地说,您需要实现IAuthenticateEx ,这将允许您通过AUTHENTICATEINFO.dwFlags区分代理和网站身份验证。

于 2013-09-04T16:24:23.023 回答