【问题标题】:Make WebBrowser control to delete its cache使 WebBrowser 控件删除其缓存
【发布时间】:2018-12-09 08:29:15
【问题描述】:

所以我正在制作一个登录到网站的测试应用程序,如果给定的凭据有效,则将它们分开。当我的网络浏览器成功登录并且程序开始重复处理以检查剩余凭据时,登录帐户会被缓存。我试过了

Me.WebBrowser1.Refresh(WebBrowserRefreshOption.Completely)

还有其他几种方法,例如导航到 about:blank,但即使我重新启动程序 webbrowser1 打开缓存的登录帐户也没有成功。我想在登录良好后使网络浏览器处于 rully 重置(启动)状态。

【问题讨论】:

  • 登录信息没有被缓存,它存储在cookie中。缓存≠饼干。缓存是指浏览器存储某些资源(CSS/JS文件、图像等)的本地副本,而存储信息的是cookies。如果你想删除登录信息,你必须清除所有 Internet Explorer 的 cookie(或者至少删除那个特定的 cookie,如果你知道它的名字)。
  • 如何找到特定的 cookie 并将其删除
  • 谷歌浏览器能够查看网站的 cookie,请参阅:https://superuser.com/a/874934。然后,您必须通过 P/Invoking InternetSetCookie()(参见:https://stackoverflow.com/a/14031887)来编辑 cookie 的过期日期,或者通过将 WebBrowser.Document.Cookie 设置为空字符串来删除当前文档中的所有 cookie。

标签: .net vb.net winforms webbrowser-control


【解决方案1】:

您可以在导航到该站点之前禁用缓存(包括 cookie)。

为此,您可以使用InternetSetOption API 函数并将INTERNET_OPTION_SUPPRESS_BEHAVIOR(81) 选项的值设置为INTERNET_SUPPRESS_COOKIE_PERSIST(3) 值。

示例

我尝试了以下示例,它禁用了缓存,虽然我已经登录 outlook.com,但它的工作方式就像启动一个新会话:

Imports System.Runtime.InteropServices
Public Class Form1
    <DllImport("wininet.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Public Shared Function InternetSetOption(hInternet As IntPtr, dwOption As Integer, _
        lpBuffer As IntPtr, dwBufferLength As Integer) As Boolean
    End Function

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim ptr = Marshal.AllocHGlobal(4)
        Marshal.WriteInt32(ptr, 3)
        InternetSetOption(IntPtr.Zero, 81, ptr, 4)
        Marshal.Release(ptr)
        WebBrowser1.Navigate("https://outlook.com")
    End Sub
End Class

要了解有关这些标志的更多信息,请查看Windows Internet Option Flags

注意:您可以在我的另一篇文章中找到此答案的 C# 版本 here

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2010-12-09
    • 2015-06-13
    • 2010-11-19
    • 2010-11-28
    • 2012-07-12
    • 2015-08-28
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多