前段時間有個需求,需要實現(xiàn)打開某個頁面,在修改頁面前截取圖片保存留底。在github找了兩個開源軟件方案,一個是PuppeteerSharp另外一個是Selenium.WebDriver。兩者都是可以實現(xiàn)無頭模式的網(wǎng)頁抓取工具,使用也非常簡單。下面介紹這兩個開源的組件以及他們抓取圖片的案例。
1、PuppeteerSharp
PuppeteerSharp 是一個用于在 .NET 平臺上控制無頭(Headless) Chrome 瀏覽器的庫。它允許開發(fā)者通過編程方式模擬瀏覽器行為,執(zhí)行網(wǎng)頁操作,截取網(wǎng)頁截圖,獲取網(wǎng)頁內(nèi)容,可以把網(wǎng)頁轉換成PDF等等。PuppeteerSharp 是 Puppeteer 在 .NET 環(huán)境中的等效實現(xiàn),Puppeteer 是由 Google 提供的一個用于控制無界面瀏覽器 Chrome 的工具。
抓取網(wǎng)頁圖片案例
//初始化瀏覽器
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true//是否隱藏瀏覽器,true為隱藏
});
// 創(chuàng)建一個頁面對象
var page = await browser.NewPageAsync();
// 導航到指定的URL
await page.GoToAsync("https://www.baidu.com");
//截圖 FullPage是全屏
await page.ScreenshotAsync("test001.png",new ScreenshotOptions() { FullPage=true });
具體大家可以參考github地址的官方使用說明。
github地址:github.com/hardkoded/puppeteer-sharp
2、Selenium.WebDriver
Selenium.WebDriver 是一個用于自動化瀏覽器操作的 .NET 庫,它提供了一組 API,允許開發(fā)者模擬用戶在瀏覽器中的行為,從而進行自動化測試、數(shù)據(jù)抓取、網(wǎng)頁操作等操作。Selenium 是一個廣泛使用的工具,用于自動化瀏覽器操作和測試,而 Selenium.WebDriver 是其在 .NET 平臺上的一個實現(xiàn)。同時Selenium.WebDriver也支持無頭模式。
抓取網(wǎng)頁圖片案例
public void WebDriverGetPic()
{
// 初始化 ChromeDriver
var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--headless"); // 使用無頭模式,即不顯示瀏覽器界面
string currentDirectory = Environment.CurrentDirectory+ "\\selenium-manager\\windows\\";
chromeOptions.BinaryLocation = "selenium-manager.exe";
using (var driver = new ChromeDriver(chromeOptions))
{
// 要截取的網(wǎng)頁的 URL
var url = "https://www.baidu.com"; // 替換為你想要截取的網(wǎng)頁的 URL
// 打開網(wǎng)頁
driver.Navigate().GoToUrl(url);
// 等待網(wǎng)頁加載完成
System.Threading.Thread.Sleep(5000); // 這里等待 5 秒,你可以根據(jù)實際情況調整等待時間
// 截取整個網(wǎng)頁的截圖
var screenshot = ((ITakesScreenshot)driver).GetScreenshot();
// 保存截圖為文件
screenshot.SaveAsFile("screenshot.png", ScreenshotImageFormat.Png);
}
}
具體大家可以參考github地址的官方使用說明。
github地址:github.com/SeleniumHQ/selenium
結語
本文介紹了兩種截圖的.NET庫,在使用上他們都依賴Chrome瀏覽器包,都支持無頭瀏覽。功能上來說PuppeteerSharp側重網(wǎng)頁內(nèi)容的處理,而Selenium.WebDriver側重于自動化測試。缺點是依賴瀏覽器。
大家用過那些.NET的網(wǎng)也截圖庫,最好不依賴瀏覽器的庫,歡迎大家在文章下方留言和吐槽,共同分析和討論.NET的網(wǎng)也截圖這個話題。
來源公眾號:DotNet開發(fā)跳槽