PuppeteerSharp:网页数据爬取nuget包

一些页面的数据会通过js解密后才显示在html,若直接通过http请求是无法获取到需要解密的数据,使用该工具可在页面加载完后,该工具可获取页面加载完后的html。

/// <summary>
    /// 单例
    /// </summary>
    public static class ChromeFactory
    {
        internal static Browser browser { get; set; } =  Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true,
            Args = new[] {"--no-sandbox"},
        }).Result;

        private readonly static object lockObj = new object();
        public static async Task<Browser> GetBrowser()
        {
            if (browser == null)
            {
                lock (lockObj)
                {
                    if (browser ==null)
                    {
                        browser =  Puppeteer.LaunchAsync(new LaunchOptions
                        {
                            Headless = true,
                            Args = new[] { "--no-sandbox" },
                        }).Result;
                    }
                }
            }

           

            return browser;
        }


        /// <summary>
        /// 获取新页面
        /// </summary>
        /// <returns></returns>
        public static async Task<Page> GetBrowserPage()
        {
            return await browser.NewPageAsync();
        }

使用Puppeteer.LaunchAsync后将会打开一个chrome程序,占用内存资源,Browser和Page类使用完后需要使用Close方法关闭chrome程序。
最好使用单例模式,.netcore 可通过IHostApplicationLifetime.ApplicationStopped注册方法,在程序结束时关闭chrome
使用PuppeteerSharp测试爬取数据时,发现服务器卡死,负载和内存达到100%,用ps aux命令查看发现是chrome程序打开了几十个,一直占用内存资源。可多次用命令关闭chrome
ps -aux | grep ‘chrome’ | awk ‘{{print $2}}’ | xargs kill

猜你喜欢

转载自blog.csdn.net/qq_30174147/article/details/107707976