zoukankan      html  css  js  c++  java
  • dotnet使用Selenium执行自动化任务

    如果要做百度文库,百度贴吧,百度知道签到,你,会怎么做?前不久我还会觉得这好像太麻烦了,now,soeasy。

    自动化测试工具:Selenium

    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 ,Chrome,Firefox,IE,PhantomJS(一个基于webkit内核的无界面浏览器)等。

    在.net framework下Selenium的使用

    1. 新建解决方案,控制台项目
    2. 添加NuGet包:Selenium.WebDriver 3.5.1 Selenium.Support 3.5.1
    3. 通过NuGet下载Phantomjs或者手动下载驱动,设置环境变量
      • Selenium.PhantomJS.WebDriver //无头浏览器 无界面
      • Selenium.Chrome.WebDriver //需要下载浏览器 ,运行时会打开浏览器
      • Selenium.Firefox.WebDriver //需要下载浏览器
        图片

    简单使用示例

    使用PhantomJS驱动保存百度首页截图

        var driver = new PhantomJSDriver();//创建浏览器
        driver.Navigate().GoToUrl("http://www.baidu.com");//打开百度
        //截图保存
        Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
        screenshot.SaveAsFile("baidu.jpg", ScreenshotImageFormat.Jpeg);
        //退出
        driver.Quit();
    

    点击百度搜索然后截图

        var driver = new PhantomJSDriver();//创建浏览器
        driver.Navigate().GoToUrl("http://www.baidu.com");//打开百度
        driver.FindElement(By.Id("kw")).SendKeys("Selenium");
        driver.FindElement(By.Id("su")).Click();
        Thread.Sleep(3000);//搜索结果显示出来再接图
        //截图保存
        Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
        screenshot.SaveAsFile("baidu.jpg", ScreenshotImageFormat.Jpeg);
        //退出
        driver.Quit();
    

    登录博客园发个闪存

    源码地址:https://coding.net/u/yimocoding/p/WeDemo/git/tree/SeleniumDemo/SeleniumDemo

    百度文库,百度贴吧,百度知道签到

    要是用模拟请求的方式得累死个人。

      static void 百度签到()
      {
          dynamic loginUser = new
          {
              UserName = "yimo",
              UserPwd = "123456"
          };
          var myDriver = new PhantomJSDriver();//创建浏览器
          var defTask = new List<string>() { "文库", "贴吧", "知道" };
          const string _loginUrl = "https://passport.baidu.com/v2/?login";
          //跳转页面
          myDriver.Navigate().GoToUrl(_loginUrl);
          myDriver.FindElement(By.Id("TANGRAM__PSP_3__userName")).SendKeys(loginUser.UserName);
          myDriver.FindElement(By.Id("TANGRAM__PSP_3__password")).SendKeys(loginUser.UserPwd);
          myDriver.FindElement(By.Id("TANGRAM__PSP_3__submit")).Click();
    
          Console.WriteLine(myDriver.Title);
    
          if (defTask.Contains("文库"))
          {
              const string _wkSignUrl = "https://wenku.baidu.com/task/browse/daily";
              Console.WriteLine($"开始百度文库签到");
              myDriver.Navigate().GoToUrl(_wkSignUrl);
              myDriver.ExecScript("$('.bg').remove();$('.g-btn-pass').click();");
              Console.WriteLine("百度文库签到完成");
              Thread.Sleep(1000);
              myDriver.SaveImg("文库签到.png");
          }
          if (defTask.Contains("贴吧"))
          {
              const string _tiebaUrl = "https://tieba.baidu.com/index.html";
              Console.WriteLine("开始百度贴吧签到");
              myDriver.Navigate().GoToUrl(_tiebaUrl);
              myDriver.FindElement(By.ClassName("onekey_btn")).Click();
              myDriver.FindElement(By.ClassName("sign_btn_nonmember")).Click();
              Console.WriteLine("百度贴吧签到完成");
              Thread.Sleep(1000);
              myDriver.SaveImg("贴吧签到.png");
          }
          if (defTask.Contains("知道"))
          {
              const string _tiebaUrl = "https://zhidao.baidu.com/";
              Console.WriteLine("开始百度知道签到");
              myDriver.Navigate().GoToUrl(_tiebaUrl);
              myDriver.FindElement(By.ClassName("go-sign-in")).Click();
              myDriver.FindElement(By.ClassName("sign-in-btn")).Click();
              Console.WriteLine("百度知道签到完成");
              Thread.Sleep(1000);
              myDriver.SaveImg("知道签到.png");
          }
          //退出
          myDriver.Quit();
      }
    

    淘宝领取淘金币

      static void 淘金币领取()
      {
          dynamic loginUser = new
          {
              UserName = "yimo",
              UserPwd = "123456"
          };
          var myDriver = new PhantomJSDriver();//创建浏览器
          const string _loginUrl = "https://login.taobao.com/member/login.jhtml";
          const string _taoUrl = "https://taojinbi.taobao.com/index.htm";
          //跳转页面
          myDriver.Navigate().GoToUrl(_loginUrl);
          //账号登录
          myDriver.FindElement(By.Id("J_Quick2Static")).Click();
    
          myDriver.FindElement(By.Id("TPL_username_1")).SendKeys(loginUser.UserName);
          myDriver.FindElement(By.Id("TPL_password_1")).SendKeys(loginUser.UserPwd);
          myDriver.FindElement(By.Id("J_SubmitStatic")).Click();
          myDriver.Navigate().GoToUrl(_taoUrl);
    
          myDriver.FindElement(By.ClassName("J_GoTodayBtn")).Click();
          //滑动验证码
          Actions action = new Actions(driver);
          var source = driver.FindElement(By.ClassName("btn_slide"));
          if (source == null)
          {
              return;
          }
          action.ClickAndHold(source).MoveByOffset(300,0);
          action.MoveToElement(source).Release();
          IAction actions = action.Build();
          actions.Perform();
      }
    

    Ctrl+F5,截图保存成功
    图片

    常用接口

    var driver=new PhantomJSDriver();//驱动实例

    1. INavigation接口: 浏览器导航接口(前进,后退,刷新),接口实例:driver.Navigate()
    2. IOptions接口: 浏览器信息接口(Cookie,设置窗口等操作),接口实例:driver.Manage()
    3. IWebElement 通过driver.FindElement()筛选获取到元素信息(Text等),可以对元素赋值(SendKeys())单击(Click())等操作

    常用操作

    • 窗口最大化:driver.Manage().Window.Maximize();
    • Cookie操作接口获取:driver.Manage().Cookies
    • 执行js:((IJavaScriptExecutor)driver).ExecuteScript("document.body.innerHTML='Selenium'");
    • 截图:((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("保存路径.png", ScreenshotImageFormat.Png);
    • 拖动,文章介绍参考
      var driver = new PhantomJSDriver();
      By by=By.ClassName("btn_slide");
      int x=300,y=0
      Actions action = new Actions(driver);
      var source = driver.FindElement(by);
      if (source == null)
      {
          return;
      }
      action.ClickAndHold(source).MoveByOffset(x, y);
      action.MoveToElement(source).Release();
      IAction actions = action.Build();
      actions.Perform();
    

    立个flag

    下一篇:SeleniumNetCoreDemo+travis-ci+Github
    Demo下载:https://coding.net/u/yimocoding/p/WeDemo/git/tree/SeleniumDemo
    clone命令:git clone https://git.coding.net/yimocoding/WeDemo.git -b SeleniumDemo

  • 相关阅读:
    selenium 安装
    创建项目/执行
    mysql远程访问
    如何通过批处理文件直接运行python代码
    python中通过字典实现函数指针
    装饰器
    正则表达式学习笔记
    Jupyter使用
    【数学】一张通往数学世界的地图-阅读笔记
    【算法导论】二叉搜索树的删除除操作
  • 原文地址:https://www.cnblogs.com/morang/p/7441091.html
Copyright © 2011-2022 走看看