自助推荐
立即入驻

VB.net用Playwright来进行采集和Web自动化操作

博客5个月前更新 桔子雨
899 00
VB.net用Playwright来进行采集和Web自动化操作

VB.net如何用Playwright来进行采集Web自动化操作的笔记

技术笔记,切勿用于非法目的

无界面方式采集是通过Headless模式来实现的。Headless模式是指在没有GUI下运行浏览器实例,从而提高性能和效率。下面是如何在vb.net中使用无界面方式采集的基本步骤:

引入必要的Playwright库

使用以下命名空间引入必要的Playwright库:

Imports Playwright
Imports Playwright.Core
Imports Playwright.Core.Browser
Imports Playwright.Core.Selectors
Imports Playwright.Core.Input
 

启动无界面浏览器实例

使用以下代码启动无界面浏览器实例:

Dim playwright As New Playwright()
Dim browser = Await playwright.Chromium.LaunchAsync(New BrowserTypeLaunchOptions() With {
.Headless = True
})
Dim page = Await browser.NewPageAsync()
 

这将启动一个无界面的Chromium浏览器实例,并创建一个新的页面实例。

进行操作和数据采集

进行所需的操作,在页面中执行所需的数据采集,并通过Playwright API提取所需的数据。例如:

 
' 导航到目标网站
Await page.GoToAsync("https://www.example.com/")
' 在表单中填写值并提交
Await page.FillAsync("#username", "username")
Await page.FillAsync("#password", "password")
Await page.ClickAsync("#submit")
' 提取数据
Dim title = Await page.TitleAsync()
Dim text = Await page.QuerySelectorAsync("#content").EvaluateAsync(Of String)("el => el.textContent")
 

关闭浏览器实例

在完成采集任务后,使用以下代码关闭浏览器实例:

 
Await browser.CloseAsync()
 

通过以上方式,就可以使用vb.net和Headless模式来实现无界面方式采集。由于无界面方式采集消耗更少的系统资源,因此通常比有界面方式采集更快和更高效。

要采集列表内容,您可以使用Playwright的API选择列表元素,然后通过循环迭代每个列表项来提取所需的内容。以下是一个基本的示例代码:

Dim listItems = Await page.QuerySelectorAllAsync("#myList li")
For Each listItem in listItems
Dim itemTitle = Await listItem.QuerySelectorAsync(".item-title").EvaluateAsync(Of String)("el => el.textContent")
Dim itemDescription = Await listItem.QuerySelectorAsync(".item-description").EvaluateAsync(Of String)("el => el.textContent")
' …执行其他操作
Next
 

上述代码使用 QuerySelectorAllAsync 方法选择所有带有 #myList  CSS选择器的列表项。然后使用循环迭代每个列表项,使用 QuerySelectorAsync 方法选择该项的子元素,然后提取所需的内容。在此示例中,我们使用了 .item-title 和 .item-description 选择器来选择列表项的标题和描述。

在执行采集任务时,可以根据需要执行其他操作。例如,将数据存储到数据库或文件中,或将其显示在控制台中。

值得注意的是,当处理大型列表时,可能会发生性能问题。为了确保脚本可以处理大型列表,可以将代码分成多批处理,或在运行脚本之前使用过滤器或其他技术缩小列表的范围。

要下载图片和文件,您可以使用Playwright提供的API来模拟用户的文件下载操作,并将文件保存到本地磁盘上。以下是一个基本的示例代码:

' 设置下载路径
Dim downloadPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "downloads")
' 在下载前监听下载事件
AddHandler page.Download, Async Sub(sender, e)
Dim download = e.Download
Await download.Path
Await download.SaveAsAsync(Path.Combine(downloadPath, download.SuggestedFilename))
End Sub
' 点击一个链接并下载文件
Dim link = Await page.QuerySelectorAsync("#download-link")
Await link.ClickAsync()
 

在上述代码中,我们首先指定下载文件的保存路径,然后使用 Download 事件来监听页面的下载操作。当用户单击一个链接时,将出现下载提示并触发下载事件。下载处理程序将获取下载对象( download )的保存路径,并使用 SaveAsAsync 方法将其保存到本地磁盘上。

请注意,您需要在处理下载之前设置下载路径,并为文件下载指定一个处理程序。下载操作需要一些时间,特别是对于大型文件,因此请确保下载已完成,然后再继续执行后续操作。

要采集图片到本地磁盘,您可以使用Playwright提供的API来下载指定的图像元素,并将其保存为图像文件。以下是一个基本的示例代码:

 
' 获取图像元素节点
Dim imageElement = Await page.QuerySelectorAsync("#myImage")
' 从图像元素的src属性中获取图像URL
Dim imageUrl = Await imageElement.EvaluateAsync(Of String)("el => el.src")
' 下载并保存图像文件
Dim imagePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "images")
Dim imageName = Path.GetFileName(imageUrl)
Dim imageData = Await page.GoToAsync(imageUrl).GetContentAsync()
If Not Directory.Exists(imagePath)
Directory.CreateDirectory(imagePath)
End If
File.WriteAllBytes(Path.Combine(imagePath, imageName), Convert.FromBase64String(imageData))
 

在上述代码中,我们首先获取图像元素节点,然后从元素的 src 属性中获取图像的URL。然后,我们在 imagePath 指定的位置创建一个目录,并使用 GoToAsync 方法将页面导航到图像的URL。此时,页面将下载图像并返回图像数据。我们将数据使用 File.WriteAllBytes 方法保存到本地磁盘上。

请注意,为了确保下载的是图像内容,我们需要使用 GetContentAsync 方法来获取数据,而不是使用 page.Download 事件处理程序来处理下载操作。我们还使用 Convert.FromBase64String 方法将返回的Base64字符串转换为字节数组,并将其保存到文件中。

另外,请注意,由于网络连接可能不稳定,所以在下载大型图像时,需要等待缓冲区数据完成后再将其写入到本地磁盘。

在Playwright中,我们可以使用 EvaluateAsync 方法来执行JavaScript代码并返回一个表示元素节点的 JSHandle 对象。然后,我们可以使用该对象来获取元素的属性和值。

以下是常见的用于获取HTML元素属性的方法:

 el.getAttribute('attributeName') :返回指定属性的值。
 el.innerHTML :返回元素内部的HTML内容。
 el.outerHTML :返回元素及其所有子元素的HTML内容。
 el.textContent :返回元素内部的纯文本内容。

此外,还有其他许多属性和方法可用于获取和操作HTML元素。您可以查看W3Schools或MDN Web文档以获取更多信息。

如果您想使用edge浏览器,需要先安装edge浏览器驱动程序。下载地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

安装驱动之后,在vb.net代码中添加以下命名空间:

Imports Playwright
Imports Playwright.Core
Imports Playwright.Core.Browser
Imports Playwright.Core.Selectors
Imports Playwright.Core.Input

然后,引用以下两个包:

Playwright
Playwright.Chromium
Install-Package Microsoft.Playwright -Version 1.15.0
Install-Package Microsoft.Playwright.Chromium -Version 1.15.0
© 版权声明

相关文章