tnblog
首页
视频
资源
登录

C#+selenium实现自动登录

9782人阅读 2019/5/24 17:35 总访问:85814 评论:1 收藏:1 手机
分类: 工具

         最近发现了一个好玩的东西,在这里分享给大家探讨一下,也顺便帮自己做一下记录,它就是selenium。


        Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。同时,selenium也可以用来抓取数据。感兴趣的朋友可以去学习一下,官网API地址:https://seleniumhq.github.io/selenium/docs/api/dotnet/


       首先,我们需要在nuget包中下载响应的dll.

第二个文件只需要下载对应浏览器的即可,我用的是谷歌,所以就用谷歌展示了。


       下载完成后,就可以开始编写了。


  1.  static void Main(string[] args)
  2.         {
  3.             // 声明一个ChromeDriver的实例
  4.             IWebDriver webDriver = new ChromeDriver();
  5.             // 指定你要访问的地址,这里我们以tnblog做测试
  6.             webDriver.Navigate().GoToUrl("http://www.tnblog.net/login/login?pjurl=http://www.tnblog.net/");
  7.             // 窗口最大化,便于脚本执行
  8.             webDriver.Manage().Window.Maximize();
  9.             // 根据元素名称清除元素文本
  10.             webDriver.FindElement(By.Name("Username")).Clear();
  11.             webDriver.FindElement(By.Name("Password")).Clear();
  12.             // 根据元素名称设置元素文本(用户名):这里有多种方式获取元素,大家可以自行尝试
  13.             webDriver.FindElement(By.Name("Username")).SendKeys("*******");
  14.             Thread.Sleep(1000);
  15.             // 根据元素名称设置元素文本(用户密码)
  16.             webDriver.FindElement(By.Name("Password")).SendKeys("*******");
  17.             Thread.Sleep(1000);
  18.             // 模拟点击登录按钮
  19.             webDriver.FindElement(By.ClassName("btn-primary")).Click();
  20.             // 这个睡眠需要注意一下,因为网络的影响,有可能会造成tcaptcha_iframe还未加载,这时如果不睡眠直接获取就有可能失败,我在这里被坑了很久,气.......
  21.             Thread.Sleep(4000);
  22.             // 获取滑动校验区域并转到滑动校验区域
  23.             IWebDriver validateDriver = webDriver.SwitchTo().Frame(webDriver.FindElement(By.Id("tcaptcha_iframe")));
  24.             // 找到蓝色滑块
  25.             var dragBtn = validateDriver.FindElement(By.Id("tcaptcha_drag_thumb"));
  26.             // 实例化一个action对象:actions对象用于对当前元素执行各种鼠标事件
  27.             Actions action = new Actions(webDriver);
  28.             // 根据设置的偏移量拖动滑块,偏移量需要计算,这里用一个固定的代替
  29.             action.DragAndDropToOffset(dragBtn, 2000).Perform();
  30.             Console.Read();
  31.         }

          


              在上述步骤下只能实现拖动滑块的效果,想要破解滑块验证,还需要计算每次滑块需要移动的偏移量以及设计拖动滑块的轨迹,否则就会因为验证速度太快,轨迹不符合真人操作,而被判定为机器操作,导致验证失败,如下图:


目前我还在想怎么模拟真人操作的轨迹,如果大家有研究出来的,请分享一下,小弟感激不尽:1573085514




评价

剑轩

2019/5/27 8:45:33

坐标不能是线性的,因为人拖动的时候不是线性的。可以试下这个思路,先人拖动记录下坐标规矩,然后代码模拟

a genius is the person who repeats the most times
排名
35
文章
15
粉丝
5
评论
5
vue.js 学习日记第五章-v-if和v-for指令的使用方式
饰心 : 吃惊!博客更新小王子?
vue.js 学习日记第三章-vue中的简单事件及事件修饰符
修心 : 一个专栏可以的!说一下前端的mvc就更好了
通过PlUpload控件配合WebApi接口完成压缩上传文件
剑轩 : 厉害了,这个很实用。这个可以实现图片压缩?
C#+selenium实现自动登录
剑轩 : 坐标不能是线性的,因为人拖动的时候不是线性的。可以试下这个思路...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
强大使人快乐。