1. 程式人生 > 其它 >通過PuppeteerSharp+Chromium代理刷頁面點選量

通過PuppeteerSharp+Chromium代理刷頁面點選量

LaunchOptions options = new LaunchOptions
                {
                    Headless = true,
                    ExecutablePath = @".local-chromium\Win64-901912\chrome-win\chrome.exe",
                    Args = new[] {
                    string.Format("--proxy-server={0}",ip),
                    
"--start-maximized",//最大視窗 "--disable-infobars",//--隱藏自動化標題 "--no-sandbox", "–single-process", "–disable-gpu", "--disable-setuid-sandbox", "--ignore-certificate-errors",
"--app=https://www.baidu.com/" }, IgnoreHTTPSErrors = true }; using (var browser = await Puppeteer.LaunchAsync(options)) { try { string userAgent = UAList[new
Random().Next(0, UAList.Count())]; var newPage = await browser.NewPageAsync(); newPage.DefaultTimeout = 15000; await newPage.SetUserAgentAsync(userAgent); ViewPortOptions vOptions = new ViewPortOptions { Width = 1920, Height = 1080 }; await newPage.SetViewportAsync(vOptions); //隱藏webdriver特徵 await newPage.EvaluateExpressionOnNewDocumentAsync("delete navigator.__proto__.webdriver;"); foreach (var href in link) { try { Stopwatch sw = new Stopwatch(); sw.Start(); await newPage.GoToAsync(href, WaitUntilNavigation.DOMContentLoaded); var jsSelectAllAnchors = @"Array.from(document.querySelectorAll('.p-card-href')).map(a => a.href);"; var urls = await newPage.EvaluateExpressionAsync<string[]>(jsSelectAllAnchors); if (urls != null && urls.Where(a => a.Contains("b2bsearch/jump?url")).Count() > 0) { string[] filter_urls = urls.Where(a => a.Contains("b2bsearch/jump?url")).ToArray(); string productUrl = filter_urls[new Random().Next(0, filter_urls.Count())]; await newPage.GoToAsync(productUrl, WaitUntilNavigation.DOMContentLoaded); await ScrollPage(newPage, 500, 800, 3, 200, 800); } sw.Stop(); Console.WriteLine("耗時:" + sw.ElapsedMilliseconds + "ms"); } catch (Exception ex) { Console.WriteLine("當前開啟頁面連結異常:" + ex.Message); if (ex.Message.Contains("ERR_TUNNEL_CONNECTION_FAILED") || ex.Message.Contains("ERR_PROXY_CONNECTION_FAILED")) { await browser.CloseAsync();//關閉瀏覽器 //重新執行任務 var d = Task.Run(() => TaskRun(link.Skip(link.IndexOf(href)).ToList())); d.Wait(); return; } } } if (newPage != null && !newPage.IsClosed) { await newPage.CloseAsync(); } if (browser != null && !browser.IsClosed) { await browser.CloseAsync();//關閉瀏覽器 } Console.WriteLine("全部任務已完成...."); } catch (Exception ex) { Console.WriteLine("global:" + ex.Message); if (browser != null && !browser.IsClosed) { await browser.CloseAsync(); var d = Task.Run(() => TaskRun(link));//遞迴執行 d.Wait(); } } } } catch (Exception ex) { Console.WriteLine(ex.Message + ";" + ex.InnerException); } } /// <summary> /// 模擬滾動頁面 /// </summary> /// <param name="page">當前頁面</param> /// <param name="times">次數</param> /// <returns></returns> async static Task ScrollPage(Page page, int minPix, int maxPix, int times, int minSleep = 1000, int maxSleep = 2000) { Func<Task> scroll = null; int i = 0; scroll = new Func<Task>(async () => { int top = new Random().Next(minPix, maxPix); await page.EvaluateExpressionAsync("window.scrollBy({top:" + top + ",behavior:'smooth'})"); Thread.Sleep(new Random().Next(minSleep, maxSleep)); i++; if (i < times) { await scroll(); } }); await scroll(); //再向上隨機滾動 await page.EvaluateExpressionAsync("window.scrollBy({top:" + (0 - new Random().Next(500, 1500)) + ",behavior:'smooth'})"); }