本人原来用的代码是VB语法,通过CefSharp控件,已经成功在【Visual Studio 2015】中用ChromiumBrowser打开了网页。 现需要历遍谷歌内核ChromiumBrowser正在打开的网页,获取网页里含有"x.x/ux/"字符串的全部超链接网址,显示在列表ListBox1。 注意:回答方发的代码需要在【Visual Studio】正常运行,有本人满意的效果一定采纳。
已经给出高报酬,太失望了,本来以为会有“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 中,你可以按照以下步骤进行操作:
在 VB 的表单中添加一个名为 ChromiumWebBrowser1 的 ChromiumBrowser 控件和一个名为 ListBox1 的 ListBox 控件。
在窗体的代码文件中添加以下代码:
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 并安装相应的包。
另外,为了保持代码简洁,上述代码中没有进行错误处理。在实际应用中,你可能需要添加适当的错误处理代码来处理异常情况。