【问题标题】:How can I interact with parallel page loaded from WebView2?如何与从 WebView2 加载的并行页面进行交互?
【发布时间】:2023-01-10 16:22:23
【问题描述】:

我已经使用 WebView2 控件编写了一些 VB.Net 代码来尝试从特定杂志下载 PDF 文件。

我的VB.Net代码如下

Imports Microsoft.Web.WebView2.Core

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Call InitializeAsync()
    End Sub

    Async Sub InitializeAsync()
        Await wv.EnsureCoreWebView2Async()
        wv.CoreWebView2.Navigate("https://journal.cinetelerevue.sudinfo.be")
    End Sub

    Private Sub wv_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles wv.NavigationCompleted
        Threading.Thread.Sleep(1000)
        Call ClickOnPdfButton()
        Threading.Thread.Sleep(1000)
    End Sub

    Async Sub ClickOnPdfButton()
        Dim sButtonCmd = "document.getElementById('readPdfBtn').click();"
        Dim task = Await wv.ExecuteScriptAsync(sButtonCmd)
    End Sub

End Class

第一个 Navigate() 方法显示正确请求的 URL。

Javascript document.getElementById('readPdfBtn').click(); 方法也可以正常工作。它打开一个新的窗口,因为链接到 click() 方法的 Javascript 代码执行以下操作

var e = window.open("","pdf_view");

程序运行后,我得到以下结果

我在第一个窗口中围绕PDF 按钮画了一个红色圆圈。

我的问题是我需要继续单击新窗口中包含的另一个PDF 按钮以启动 PDF 下载。

如何使用wvWebView2 变量访问它?

在任务管理器中,我可以看到新的 Windows 附加到 Extract-PDF-From-Web 应用程序,这是我的 VB.Net 应用程序的名称。

【问题讨论】:

  • 这个答案会有所帮助,但我等待 VB.Net 的答案而不是 C# 的答案,其中事件是用另一种技术定义的。
  • 您订阅事件的方式无关紧要。您可以使用所用语言的语法来执行操作。无论语言如何,事件都是相同的。重要的是你测试这个方法(所有语言都一样),看看它是否适合你。网站有非常不同的方式来生成弹出窗口。如果提供的工具按原样工作,那就太好了,否则您需要尝试其他方法。由于此站点似乎需要订阅,因此您可能是唯一可以测试这些方法的人

标签: vb.net window webview2


【解决方案1】:

为了解决这个问题,我在wv.NavigationCompleted事件中添加了一个事件处理程序,我在其中更改了e.NewWindow属性。

我也尝试设置URI 但没有成功。

使用 Visual Studio 2022 的完整 VB.Net 解决方案如下

Imports Microsoft.Web.WebView2.Core

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Call InitializeAsync()
    End Sub

    Async Sub InitializeAsync()
        Await wv.EnsureCoreWebView2Async()
        wv.CoreWebView2.Navigate("https://journal.cinetelerevue.sudinfo.be")
    End Sub

    Public Sub NewWindowRequested(sender As Object, e As CoreWebView2NewWindowRequestedEventArgs)
        e.Handled = True
        Dim cwv As CoreWebView2 = sender
        e.NewWindow = cwv
    End Sub

    Private Sub wv_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles wv.NavigationCompleted
        AddHandler wv.CoreWebView2.NewWindowRequested, AddressOf Me.NewWindowRequested
        Threading.Thread.Sleep(1000)
        Call ClickOnPdfButton()
    End Sub

    Async Sub ClickOnPdfButton()
        Dim sButtonCmd = "document.getElementById('readPdfBtn').click();"
        Dim task = Await wv.ExecuteScriptAsync(sButtonCmd)
    End Sub

End Class

运行此代码后,我得到以下结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2021-06-12
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多