c#使用selenium过滑动验证码

滑动验证码如下:

c#使用selenium过滑动验证码

1、vs引入以下三个包(.net core 3.1):

c#使用selenium过滑动验证码

2、c#引用:

private void SeleniumVertifyCode(Uri uri)
        {
var options = new OpenQA.Selenium.Chrome.ChromeOptions();
            //不显示浏览器UI窗口
            options.AddArgument("-headless");
            //设置浏览器大小避免无头模式下元素越界异常
            options.AddArgument("--window-size=1920,1050");
            //减少headless模式下日志
            options.AddArgument("log-level=3");
            using IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(options);
            //先设置uri
            driver.Navigate().GoToUrl(uri);
            var cookie = driver.Manage().Cookies;
            //再添加cookie
            cookie.AddCookie(new Cookie("name", "value", ".com", "/", null));
            //再次访问验证码uri
            driver.Navigate().GoToUrl(uri);
            //反爬:设置windows.navigate.webdrive的值为undefine
            driver.ExecuteJavaScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
//查看网页源码
//var source = driver.PageSource;
            //找到滑块元素
            var slide = driver.FindElement(By.CssSelector("#nc_1_n1z"));
            var verifyContainer = driver.FindElement(By.CssSelector(".nc-lang-cnt"));
            var width = verifyContainer.Size.Width;
            var action = new Actions(driver);
            //点击并按住滑块元素
            action.ClickAndHold(slide).Perform();
            Random random = new Random();
            int offset = 0;
            //模仿人工滑动
            const int minOffset = 10;
            const int maxOffset = 30;
            while (width > offset)
            {
                offset += random.Next(minOffset, maxOffset);
                action.MoveByOffset(offset, 0).Perform();
                var code = driver.FindElement(By.CssSelector(".nc-lang-cnt")).Text;
                if (code.Contains("验证通过"))
                {
                    break;
                }
                System.Threading.Thread.Sleep(offset * minOffset);
            }
            //点击验证按钮
            action.Click(driver.FindElement(By.CssSelector("#verify"))).Perform();
            //退出webdriver
            driver.Quit();
        }

Original: https://www.cnblogs.com/soundcode/p/16203973.html
Author: 左正
Title: c#使用selenium过滑动验证码

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545676/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球