最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用PuppeteerSharp庫的示例代碼

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

寫在前面

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

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

代碼實(shí)現(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,無頭配置將自動(dòng)禁用
            });
 
            //load: window.onload事件被觸發(fā)時(shí)候完成導(dǎo)航,某些情況下它根本不會(huì)發(fā)生。
            //domcontentloaded: Domcontentloaded事件觸發(fā)時(shí)候認(rèn)為導(dǎo)航成功
            //networkidle0: 在 500ms 內(nèi)沒有網(wǎng)絡(luò)連接時(shí)就算成功(全部的request結(jié)束),才認(rèn)為導(dǎo)航結(jié)束
            //networkidle2: 500ms 內(nèi)有不超過 2 個(gè)網(wǎng)絡(luò)連接時(shí)就算成功(還有兩個(gè)以下的request),就認(rèn)為導(dǎo)航完成
            //加載時(shí)長(zhǎng) 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"); // 點(diǎn)擊
            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é)果如下:

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

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

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

您可能感興趣的文章:

相關(guān)文章

  • 淺解關(guān)于C#多線程的介紹

    淺解關(guān)于C#多線程的介紹

    本篇文章小編將為大家介紹,淺解關(guān)于C#的多線程,有需要的朋友可以參考一下
    2013-04-04
  • C#設(shè)置自定義文件圖標(biāo)實(shí)現(xiàn)雙擊啟動(dòng)(修改注冊(cè)表)

    C#設(shè)置自定義文件圖標(biāo)實(shí)現(xiàn)雙擊啟動(dòng)(修改注冊(cè)表)

    這篇文章介紹的是利用C#設(shè)置自定義文件圖標(biāo),然后實(shí)現(xiàn)雙擊啟動(dòng)的功能,文章給出了示例代碼,介紹的很詳細(xì),有需要的可以參考借鑒。
    2016-08-08
  • C#中PuppeteerSharp庫的應(yīng)用詳解

    C#中PuppeteerSharp庫的應(yīng)用詳解

    PuppeteerSharp是一個(gè)針對(duì)Google Chrome瀏覽器的高級(jí)API庫,這篇文章主要為大家詳細(xì)介紹了PuppeteerSharp庫在C#中的具體應(yīng)用,需要的小伙伴可以了解下
    2024-01-01
  • C#?Web實(shí)現(xiàn)文件上傳的示例詳解

    C#?Web實(shí)現(xiàn)文件上傳的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#?Web實(shí)現(xiàn)文件上傳的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C#針對(duì)xml文件轉(zhuǎn)化Dictionary的方法

    C#針對(duì)xml文件轉(zhuǎn)化Dictionary的方法

    這篇文章主要介紹了C#針對(duì)xml文件轉(zhuǎn)化Dictionary的方法,是C#操作XML文件的典型應(yīng)用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C#編寫的生辰八字計(jì)算程序

    C#編寫的生辰八字計(jì)算程序

    這篇文章主要介紹了C#編寫的生辰八字計(jì)算程序,假設(shè)一個(gè)人的公歷出生時(shí)間,范圍必須要在2012-2015年之間,因?yàn)楸臼纠绦蛑惶峁┝诉@幾年的農(nóng)歷數(shù)據(jù),小伙伴們參考下,可以自由擴(kuò)展
    2015-03-03
  • c# 使用HtmlAgilityPack解析Html

    c# 使用HtmlAgilityPack解析Html

    這篇文章主要介紹了c# 如何使用HtmlAgilityPack解析Html,幫助大家利用c#進(jìn)行爬蟲,感興趣的朋友可以了解下
    2020-12-12
  • C#中的程序集和反射介紹

    C#中的程序集和反射介紹

    這篇文章主要介紹了C#中的程序集和反射介紹,程序集包含資源文件,類型元數(shù)據(jù)、IL代碼,每個(gè)程序集都有自己的名稱、版本等信息,反射就是動(dòng)態(tài)獲取程序集中的元數(shù)據(jù)的功能,需要的朋友可以參考下
    2015-01-01
  • C#程序最小化到托盤圖標(biāo)操作步驟與實(shí)現(xiàn)代碼

    C#程序最小化到托盤圖標(biāo)操作步驟與實(shí)現(xiàn)代碼

    設(shè)置窗體屬性showinTask=false;加notifyicon控件notifyIcon1,為控件notifyIcon1的屬性Icon添加一個(gè)icon圖標(biāo);添加窗體最小化事件(首先需要添加事件引用)接下來介紹實(shí)現(xiàn)代碼,感興趣的朋友可以研究下
    2012-12-12
  • c# 匿名方法的小例子

    c# 匿名方法的小例子

    c# 匿名方法的小例子,需要的朋友可以參考一下
    2013-04-04

最新評(píng)論

朔州市| 闽清县| 来凤县| 双柏县| 连城县| 青浦区| 绥滨县| 巨鹿县| 汪清县| 六安市| 西和县| 桃园县| 行唐县| 合作市| 全州县| 湘潭县| 乌海市| 林芝县| 白河县| 毕节市| 平原县| 湾仔区| 栾川县| 临漳县| 乡城县| 崇明县| 湛江市| 凌海市| 泸溪县| 武城县| 瑞丽市| 阿巴嘎旗| 南木林县| 南雄市| 咸阳市| 讷河市| 常德市| 盈江县| 搜索| 三明市| 柳州市|