[robot]selenium+chrome以headless无痕方式执行

1.下载webdriver.dll+webdriver.support.dll的3.2版本+ chromedriver.exe的2.33版本懒人包
2.新增console专案,把step1的dll都加入参考,System.Management也加入参考,然后把ChromeDriver资料夹复制到应用程式的bin\Debug路径下
3.贴上以下程式码,专案名称改成当下自己的:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Remote;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading;

namespace ESportDataCollector
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("start...");
            //每次執行前先刪除之前掛掉沒在用的chrome, chromedriver的process
            KillUncontrollerBrowser();
            IWebDriver driver;
            //隱藏chromedriver.exe視窗
            ChromeOptions chromeBrowserOptions = new ChromeOptions();
            var driverService = ChromeDriverService.CreateDefaultService(@"ChromeDriver");
            driverService.HideCommandPromptWindow = true;

            //chrome有時候容易因為sandbox的封裝環境導致掛點,因此要no-sandbox
            //headless可以隱藏chrome(chromedriver.exe版本需2.29以上)            
            chromeBrowserOptions.AddArguments(new List<string>() { "no-sandbox", "headless", "disable-gpu", "window-size=1904x1500" });

            driver = new ChromeDriver(driverService, chromeBrowserOptions);
            driver.Navigate().GoToUrl("https://tw.yahoo.com");
            Thread.Sleep(30000);
        }

        #region 自訂函數

        public static void KillUncontrollerBrowser()
        {
            string str = "chrome";
            foreach (var item in str.Split(';'))
            {
                KillUncontrollerProcess(item);
            }
        }
        /// <summary>
        /// kill有 ParentID 的process
        /// </summary>
        /// <param name="ProcessName">傳入要檢查的exe名稱(ex: firefox,chrome,phantomjs)</param>
        private static void KillUncontrollerProcess(string ProcessName)
        {

            Process[] ProcList = Process.GetProcessesByName(ProcessName);


            foreach (Process proc in ProcList)
            {
                try
                {
                    ManagementObject managementObject = new ManagementObject(string.Format("win32_process.handle='{0}'", proc.Id));
                    managementObject.Get();
                    int parentId = Convert.ToInt32(managementObject["ParentProcessId"]);

                    try
                    {
                        if(parentId == 0)
                        {
                            continue;
                        }
                        Process parentProc = Process.GetProcessById(parentId);
                        if (parentProc.ProcessName == "chromedriver")
                        {
                            //先刪除此process的parent process                            
                            parentProc.Kill();
                            //再刪除自己
                            proc.Kill();
                        }


                    }
                    catch
                    {


                        continue;
                    }
                }
                catch
                {

                    continue;
                }


            }


        }

        #endregion
    }
}

完了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值