美文网首页dotNET我爱编程.NET
Selenium + C# 实现模拟百度贴吧签到 2

Selenium + C# 实现模拟百度贴吧签到 2

作者: HapplyFox | 来源:发表于2018-08-07 11:41 被阅读13次

    通过上文的例子,我们对Selenium的用法有了一个简单的印象。接下去我们还是基于这个组件进行模拟百度贴吧签到的功能。

    逻辑分析

    1、登陆
    2、得到关注的贴吧
    3、签到

    登陆首页

    首页.png

    点击登陆按钮

    点击登陆png

    输入用户名和密码

    输入用户名密码.png

    检测异常登录,手机认证

    手机验证.png

    登陆代码说明

        public static void Login(string userName, string pwd)
            {
                var driver = new ChromeDriver();
                driver.Manage().Window.Maximize();//浏览器最大化
                driver.Navigate().GoToUrl("https://www.baidu.com");
                oldwin = driver.CurrentWindowHandle;//首页签句柄
                driver.FindElement(By.XPath("//*[@id=\"u1\"]/a[7]")).Click();//点击登陆
    
                /*隐式等待设置的内容在driver的整个生命周期都有效,所以实际使用过程当中有弊端。*/
                driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 0, 5);
    
                driver.FindElement(By.Id("TANGRAM__PSP_10__footerULoginBtn")).Click();//点击用户名登陆
                driver.FindElement(By.Name("userName")).SendKeys(userName);//用户名
                driver.FindElement(By.Name("password")).SendKeys(pwd);//密码
                driver.FindElement(By.Id("TANGRAM__PSP_10__submit")).Click();   //点击登陆
                Thread.Sleep(1000);
    
                try
                {
                    //判断是否存在手机验证码
                    driver.FindElement(By.Id("TANGRAM__36__button_send_mobile")).Click();//发送手机验证码
                    string vcode = Console.ReadLine();
                    driver.FindElement(By.Id("TANGRAM__36__input_vcode")).SendKeys(vcode);//输入6为数字验证码
                    driver.FindElement(By.Id("TANGRAM__36__button_submit")).Click();//确认
                }
                catch (Exception e)
                {
                }
            }
    

    贴吧签到

    代码说明
    传入浏览器Driver,通过xpath得到所有关注的贴吧,循环打开贴吧的页面,模拟点击签到按钮

    xpath说明.png 签到.png
        //贴吧一键签到
            public static void OnTimeSign(ChromeDriver driver)
            {
                driver.FindElement(By.XPath("//*[@id=\"u_sp\"]/a[5]")).Click();
                driver.SwitchTo().Window(driver.WindowHandles[1]);//操作权限为第二个页签
                var tiebaList = driver.FindElements(By.XPath("//*[@id=\"likeforumwraper\"]/a"));
                foreach (var tieba in tiebaList)
                {
                    tieba.Click();
                    driver.SwitchTo().Window(driver.WindowHandles[2]);//操作权限为第三个页签
                    driver.FindElement(By.XPath("//*[@id=\"signstar_wrapper\"]/a")).Click();
                    driver.Close();
                    driver.SwitchTo().Window(driver.WindowHandles[1]);//操作权限为第二个页签
                }
                driver.Navigate().Refresh();
                driver.Close();
                driver.SwitchTo().Window(oldwin);
            }
    

    就是这么简单。是不是相比原来的方式要简单的多,你是如何浏览器操作的,代码就怎么写。

    代码直通车
    Github FoxCrawler项目下的SeleniumClawer解决方案

    相关文章

      网友评论

        本文标题:Selenium + C# 实现模拟百度贴吧签到 2

        本文链接:https://www.haomeiwen.com/subject/ywyovftx.html