怎么才能历遍Chromium谷歌Browser获取网页里的超链接

本人原来用的代码是VB语法,通过CefSharp控件,已经成功在【Visual Studio 2015】中用ChromiumBrowser打开了网页。 现需要历遍谷歌内核ChromiumBrowser正在打开的网页,获取网页里含有"x.x/ux/"字符串的全部超链接网址,显示在列表ListBox1。 注意:回答方发的代码需要在【Visual Studio】正常运行,有本人满意的效果一定采纳。

img

已经给出高报酬,太失望了,本来以为会有“DA 神”出现,整个CSDN论坛居然没有一个人可以解决这难题。

VB语言可以通过使用Chromium谷歌浏览器控件来历遍网页中的超链接。以下是一个简单的示例代码,演示如何使用VB语言和Chromium浏览器控件来获取网页中的所有超链接:

Private Sub Chromium_DocumentComplete(ByVal URL As String)  
    Dim iframe As Object  
    Dim doc As Object  
    Dim element As Object  
    Dim href As String  
      
    Set iframe = Chromium.Document.GetElementsByTagName("iframe")  
    For Each iframe In Chromium.Document.iframes  
        Set doc = iframe.ContentDocument  
        If doc Is Nothing Then  
            Set doc = iframe.ContentWindow.document  
        End If  
        If doc Is Nothing Then  
            Exit For  
        End If  
        Set elements = doc.getElementsByTagName("a")  
        For Each element In elements  
            href = element.href  
            '处理超链接  
            '...  
        Next element  
    Next iframe  
End Sub

在上面的代码中,我们首先获取Chromium浏览器中的所有iframe元素,并遍历每个iframe。然后,我们获取每个iframe中的文档对象,并使用getElementsByTagName方法获取所有的超链接元素。最后,我们遍历每个超链接元素,获取其href属性,并对其进行处理。

请注意,这只是一个简单的示例代码,实际应用中可能需要更多的代码来处理不同的情况和异常。此外,Chromium浏览器控件还有其他方法和属性,可以用于浏览网页、执行JavaScript等操作。

如有帮助还望采纳,感谢。

使用for循环试试:

For i = 0 To WebBrowser1.Document.DomDocument.links.length - 1
If InStr(WebBrowser1.Document.DomDocument.links(i),"要获取的特征网址") Then ListBox1.Items.Add(WebBrowser1.Document.DomDocument.links(i))
Next

批量提取网页中的超链接
可以参考这个例子


Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)  
    Dim doc As Object  
    Set doc = WebBrowser1.Document  
      
    Dim links As Object  
    Set links = doc.getElementsByTagName("a")  
      
    Dim link As Object  
    For Each link In links  
        Dim href As String  
        href = link.href  
        '在控制台输出超链接的URL  
        Debug.Print href  
    Next link  
End Sub

我们使用WebBrowser1_DocumentComplete事件来检测WebBrowser控件中文档加载完成的情况。然后,我们获取文档对象并使用getElementsByTagName方法获取所有超链接元素。最后,我们循环遍历每个超链接并获取其URL,将其输出到控制台。

可以参考我的博客中的文章,python获取网页中的内容。

可能有帮助
https://ms.mbd.baidu.com/r/13jVyHYwwSc?f=cp&u=cfec73945eeadd86?

【WebDriver原理及实验(vb6 (Visual Basic 6.0) 调用谷歌浏览器)】https://mbd.baidu.com/ma/s/ye88gypA

用cefsharp可以。我写过一篇,浏览的网页资源可以一健下载。遍历所有链接

找了半天,我觉得这个应该能给你点启示:

如果不可以用对象提取,是不是可以考虑自己解析HTML提取a的link呢,当然如果一定要用对象提取有有办法的。

可以使用py 吗 ???

要遍历ChromiumBrowser正在打开的网页并获取包含特定字符串的超链接网址,可以参考以下代码:

Dim handler As New WebBrowserDocumentCompletedHandler  
Dim url As String = "https://www.google.com"  
  
browser.Navigate(url)  
AddHandler browser.DocumentCompleted, AddressOf handler.Invoke  
  
While browser.IsLoading  
    Application.DoEvents()  
End While  
  
handler.Invoke(Nothing, Nothing)  
  
For Each link As HtmlElement In browser.Document.Links  
    If link.InnerHtml.Contains("x.x/ux/") Then  
        ListBox1.Items.Add(link.href)  
    End If  
Next

参考gpt:
《c# - extract links from web page on cefsharp - Stack Overflow》1:这个问题是关于如何用CefSharp从网页上提取包含"http://"的链接,回答者建议使用JS来操作文档,并给出了一些参考链接。
《vb.net - Cefsharp: Get hyperlinks from document - Stack Overflow》2:这个问题是关于如何用CefSharp从网页上获取所有的链接,回答者给出了一个C#的代码示例,使用EvaluateScriptAsync方法来执行JS并返回一个List类型的结果。
《How to get all Class names from CefSharp Browser URL》3:这个问题是关于如何用CefSharp从网页上获取所有的类名,回答者给出了一个C#的代码示例,使用Browser.GetMainFrame().GetSourceAsync()方法来获取网页源码,并使用HtmlAgilityPack库来解析HTML并提取类名。
《CefSharp C# How would I get the link to the current website?》4:这个问题是关于如何用CefSharp获取当前网站的链接,回答者给出了一个C#的代码示例,使用Browser.Address属性来获取当前网址,并将其赋值给一个TextBox控件。
你可以点击下面的链接查看更多的信息:
1: https://stackoverflow.com/questions/44244500/extract-links-from-web-page-on-cefsharp 2: https://stackoverflow.com/questions/34518060/cefsharp-get-hyperlinks-from-document 3: https://learn.microsoft.com/en-us/answers/questions/471104/how-to-get-all-class-names-from-cefsharp-browser-u 4: https://stackoverflow.com/questions/44124154/cefsharp-c-sharp-how-would-i-get-the-link-to-the-current-website

如果你需要在 VB6.0 中实现类似的功能,你可以考虑使用 WebBrowser 控件来打开网页,并使用 VB6.0 的相关功能来遍历网页,获取含有指定特征的超链接网址。以下是一个简单示例,演示如何在 VB6.0 中使用 WebBrowser 控件来实现类似的功能:
首先,在 VB6.0 的窗体中添加一个 WebBrowser 控件(名称为 WebBrowser1),并添加一个 ListBox 控件(名称为 ListBox1)。
然后,你可以按照以下代码示例来实现功能:

Private Sub Form_Load()
    ' 打开网页
    WebBrowser1.Navigate "https://www.example.com"

    ' 等待网页加载完成
    Do While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    ' 遍历网页,获取含有指定特征的超链接网址
    Dim links As Object
    Set links = WebBrowser1.Document.Links

    Dim link As Object
    For Each link In links
        Dim href As String
        href = link.href
        
        ' 判断是否含有指定特征(例如含有 "u" 字母)
        If InStr(href, "u") > 0 Then
            ListBox1.AddItem href
        End If
    Next link
End Sub

请注意,上述示例是简单的代码,可能需要根据具体的网页结构和需要获取的特征进行适当的调整。在 VB6.0 中,遍历网页和获取超链接等功能相对复杂,因为 VB6.0 不像现代的 .NET 平台拥有更为强大的 Web 相关库和功能。

该回答引用chatgpt

要在 VB 中使用谷歌内核 ChromiumBrowser 遍历打开的网页并获取含有指定特征的全部超链接网址,并将它们显示在 ListBox1 中,你可以按照以下步骤进行操作:

  1. 在 VB 的表单中添加一个名为 ChromiumWebBrowser1 的 ChromiumBrowser 控件和一个名为 ListBox1 的 ListBox 控件。

  2. 在窗体的代码文件中添加以下代码:

Imports CefSharp.WinForms

Public Class Form1
    Dim browser As ChromiumWebBrowser

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 创建 ChromiumBrowser 控件
        browser = New ChromiumWebBrowser()
        browser.Dock = DockStyle.Fill

        ' 将 ChromiumBrowser 控件添加到窗体中
        Me.Controls.Add(browser)

        ' 注册 ChromiumBrowser 控件的事件
        AddHandler browser.LoadingStateChanged, AddressOf Browser_LoadingStateChanged
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 加载指定的网页
        browser.Load("https://example.com")
    End Sub

    Private Sub Browser_LoadingStateChanged(sender As Object, e As CefSharp.LoadingStateChangedEventArgs)
        ' 当网页加载完成时进行处理
        If e.IsLoading = False Then
            ' 在网页中执行 JavaScript 代码,获取含有指定特征的超链接网址
            Dim script As String = "var links = document.querySelectorAll('a[href*=""x.x/ux/""]'); " &
                                   "var urls = Array.from(links).map(link => link.href); " &
                                   "urls.join('\n');"
            Dim result As Object = browser.EvaluateScriptAsync(script).Result
            Dim urls As String = result.ToString()

            ' 将获取到的网址显示在 ListBox1 中
            ListBox1.Items.Clear()
            ListBox1.Items.AddRange(urls.Split(vbLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
        End If
    End Sub
End Class

上述代码使用 CefSharp 库来实现在 VB 中使用谷歌内核 ChromiumBrowser 控件。在窗体的 Load 事件处理程序中,创建了一个 ChromiumBrowser 控件,并将其添加到窗体中。在 Button1 的 Click 事件处理程序中,加载了指定的网页。在 Browser_LoadingStateChanged 事件处理程序中,当网页加载完成后,使用 JavaScript 代码获取含有指定特征的超链接网址,并将其显示在 ListBox1 中。

请注意,你需要安装 CefSharp 库才能使用 ChromiumBrowser 控件。你可以使用 NuGet 包管理器来安装 CefSharp。在 Visual Studio 中,右击项目,选择「管理 NuGet 包」,搜索 CefSharp 并安装相应的包。

另外,为了保持代码简洁,上述代码中没有进行错误处理。在实际应用中,你可能需要添加适当的错误处理代码来处理异常情况。