欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用PuppeteerSharp庫的示例代碼

 更新時間:2023年12月07日 09:38:55   作者:rjcql  
PuppeteerSharp 是一個用于在 .NET 平臺上控制無頭(Headless) Chrome 瀏覽器的庫,本文主要為大家詳細(xì)介紹了C#中使用PuppeteerSharp庫的工具類,需要的可以了解下

寫在前面

類庫介紹:PuppeteerSharp 是一個用于在 .NET 平臺上控制無頭(Headless) Chrome 瀏覽器的庫。它允許開發(fā)者通過編程方式模擬瀏覽器行為,執(zhí)行網(wǎng)頁操作,截取網(wǎng)頁截圖,獲取網(wǎng)頁內(nèi)容,可以把網(wǎng)頁轉(zhuǎn)換成PDF等等。PuppeteerSharp 是 Puppeteer 在 .NET 環(huán)境中的等效實現(xiàn),Puppeteer 是由 Google 提供的一個用于控制無界面瀏覽器 Chrome 的工具。

老規(guī)矩通過NuGet進(jìn)行安裝

代碼實現(xiàn)

        public static async void DoScreenshot(string url)
        {
            using var browserFetcher = new BrowserFetcher();
            await browserFetcher.DownloadAsync();
            await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
            await using var page = await browser.NewPageAsync();
            await page.SetViewportAsync(new ViewPortOptions
            {
                Width = 1920,
                Height = 1080
            });
            await page.GoToAsync(url);
            var picPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.jpg");
            await page.ScreenshotAsync(picPath);
            await browser.CloseAsync();
        }
 
        public static async void ExportAsPdf(string url)
        { 
            using var browserFetcher = new BrowserFetcher();
            await browserFetcher.DownloadAsync();
            await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
            await using var page = await browser.NewPageAsync();
            await page.GoToAsync(url);
            //等待字體加載完畢
            await page.EvaluateExpressionHandleAsync("document.fonts.ready");
            var pdfPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.pdf");
            await page.PdfAsync(pdfPath);
            await browser.CloseAsync();
        }
 
        public static async void FetchUrls(string url)
        {
            //瀏覽器配置
            var options = new LaunchOptions { Headless = true };
            await new BrowserFetcher().DownloadAsync();
 
            //打開瀏覽器
            using (var browser = await Puppeteer.LaunchAsync(options))
            using (var page = await browser.NewPageAsync())
            {
                //加載頁面
                await page.GoToAsync(url);
                var urlList = new List<string>();
                //獲取所有超鏈接
                var jsSelectAllAnchors = @"Array.from(document.querySelectorAll('a')).map(a => a.href);";
                var urls = await page.EvaluateExpressionAsync<string[]>(jsSelectAllAnchors);
                foreach (string u in urls)
                {
                    urlList.Add($"Url: {u}");
                }
                var urlPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "urls.txt");
                File.WriteAllLines(urlPath, urlList);
                await browser.CloseAsync();
            }
        }
 
 
        public static async void SearchTest(string url)
        {
            using var browserFetcher = new BrowserFetcher();
            await browserFetcher.DownloadAsync();
            await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
            await using var page = await browser.NewPageAsync();
            await page.SetViewportAsync(new ViewPortOptions
            {
                Width = 1920,
                Height = 1080,
                //Devtools = true // 啟用 Chrome DevTools,無頭配置將自動禁用
            });
 
            //load: window.onload事件被觸發(fā)時候完成導(dǎo)航,某些情況下它根本不會發(fā)生。
            //domcontentloaded: Domcontentloaded事件觸發(fā)時候認(rèn)為導(dǎo)航成功
            //networkidle0: 在 500ms 內(nèi)沒有網(wǎng)絡(luò)連接時就算成功(全部的request結(jié)束),才認(rèn)為導(dǎo)航結(jié)束
            //networkidle2: 500ms 內(nèi)有不超過 2 個網(wǎng)絡(luò)連接時就算成功(還有兩個以下的request),就認(rèn)為導(dǎo)航完成
            //加載時長 networkidle0 > networkidle2 > load > domcontentloaded 
            //await page.GoToAsync(url, new NavigationOptions() { WaitUntil = new WaitUntilNavigation[] { WaitUntilNavigation.Networkidle0 } });
 
            // 跟蹤日志
            //await page.Tracing.StartAsync(new TracingOptions { Path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"race.json") });
            //await page.Tracing.StopAsync();
 
            await page.GoToAsync(url);
            await page.WaitForSelectorAsync(".searchbox input");
            await page.FocusAsync(".searchbox input"); // 聚焦
            await page.Keyboard.TypeAsync("CN Tower, Toronto, Ontario, Canada"); // 鍵盤輸入
            await page.ClickAsync(".searchIcon"); // 點擊
            await page.WaitForNavigationAsync();
            var content = await page.GetContentAsync();
 
            // 下載配置
            //var cdp = await page.Target.CreateCDPSessionAsync();
            //await cdp.SendAsync("Page.setDownloadBehavior", new
            //{
            //    behavior = "allow",
            //    downloadPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "testing_downloads")
            //});
            //await cdp.DetachAsync();
        }

調(diào)用示例

PuppeteerHelper.DoScreenshot("https://www.baidu.com/");
PuppeteerHelper.ExportAsPdf("https://www.baidu.com/");
PuppeteerHelper.FetchUrls("https://www.baidu.com/");

 執(zhí)行結(jié)果如下:

需要注意的是運行時記得科學(xué)上網(wǎng),不然還是手動將chrome包下載好后,下載后內(nèi)容是這樣的

官網(wǎng)源碼: https://github.com/hardkoded/puppeteer-sharp

到此這篇關(guān)于C#使用PuppeteerSharp庫的示例代碼的文章就介紹到這了,更多相關(guān)C# PuppeteerSharp內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • C#調(diào)用打印機實現(xiàn)打印

    C#調(diào)用打印機實現(xiàn)打印

    這篇文章介紹了C#調(diào)用打印機實現(xiàn)打印的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • .NET實現(xiàn)父窗體關(guān)閉而不影響子窗體的方法

    .NET實現(xiàn)父窗體關(guān)閉而不影響子窗體的方法

    這篇文章主要介紹了.NET實現(xiàn)父窗體關(guān)閉而不影響子窗體的方法,很實用的功能,需要的朋友可以參考下
    2014-08-08
  • C# 8.0中的范圍類型(Range Type)示例詳解

    C# 8.0中的范圍類型(Range Type)示例詳解

    這篇文章主要給大家介紹了關(guān)于C# 8.0中范圍類型(Range Type)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C# 使用NModbus的實現(xiàn)示例

    C# 使用NModbus的實現(xiàn)示例

    本文主要介紹了在C#中使用NModbus4庫進(jìn)行Modbus通信,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • C#泛型接口的協(xié)變和逆變

    C#泛型接口的協(xié)變和逆變

    本文詳細(xì)講解了C#泛型接口的協(xié)變和逆變,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#面向?qū)ο缶幊袒A(chǔ)概念匯總

    C#面向?qū)ο缶幊袒A(chǔ)概念匯總

    今天小編就為大家分享一篇關(guān)于C#面向?qū)ο缶幊袒A(chǔ)概念匯總的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#提示:“在證書存儲區(qū)中找不到清單簽名證書”的解決方法

    C#提示:“在證書存儲區(qū)中找不到清單簽名證書”的解決方法

    這篇文章主要介紹了C#提示:“在證書存儲區(qū)中找不到清單簽名證書”的解決方法,分析了幾種常見的解決方案供大家選擇使用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C# WinForm編程獲取文件物理路徑的方法

    C# WinForm編程獲取文件物理路徑的方法

    這篇文章主要介紹了C# inForm編程獲取文件物理路徑的方法,獲取的物理路徑是軟件即軟件安裝所在目錄,需要的朋友可以參考下
    2014-08-08
  • 詳解如何在C#中處理空值

    詳解如何在C#中處理空值

    在任何編程語言中開發(fā)應(yīng)用程序時,經(jīng)常會遇到空異?;蚩找卯惓#敲聪旅孀屛覀兲接懸幌略贑#中處理空值的各種方法吧,需要的可以收藏下
    2023-07-07
  • 淺談c# 浮點數(shù)計算

    淺談c# 浮點數(shù)計算

    本文通過具體的示例給大家演示了下C#中浮點數(shù)運算所遇到的問題及解決方法,有需要的小伙伴可以參考下
    2017-09-09

最新評論