dotnet使用Selenium执行自动化任务
如果要做百度文库,百度贴吧,百度知道签到,你,会怎么做?前不久我还会觉得这好像太麻烦了,now,soeasy。
自动化测试工具:Selenium
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 ,Chrome,Firefox,IE,PhantomJS(一个基于webkit内核的无界面浏览器)等。
- Selenium项目地址:https://github.com/SeleniumHQ/selenium
- Selenium文档地址:http://seleniumhq.github.io/selenium/docs/api/dotnet/
在.net framework下Selenium的使用
- 新建解决方案,控制台项目
- 添加NuGet包:
Selenium.WebDriver 3.5.1Selenium.Support 3.5.1 - 通过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();//驱动实例
INavigation接口: 浏览器导航接口(前进,后退,刷新),接口实例:driver.Navigate()IOptions接口: 浏览器信息接口(Cookie,设置窗口等操作),接口实例:driver.Manage()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
dotnet使用Selenium执行自动化任务的更多相关文章
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Selenium执行测试脚本稳定性的一些经验分享交流
Selenium执行测试脚本稳定性的一些经验分享交流 公司的自动化WEB测试框架IATA已上线运行了一段时间,期间发现一些脚本稳定性的问题,与大家分享一下. CASE执行游览器:ie firefox ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(下)
写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...
- Selenium Web 自动化 - 如何找到元素
Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏览器 ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
随机推荐
- fedora下一些问题的解决方案汇总
解决fedora下一些使用问题 一 解决fedora下无法使用Fn+功能键来调整亮度的问题 在fedora下,背光的配置参数在/sys/class/backlight文件夹下,根据不同的显卡,有不同的 ...
- Java 基本语法----关键字、标识符
关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class interface enum byte ...
- python之基本内容
这里提供在使用python进行开发中常使用到的方法技巧,如有不对欢迎批评指正. 要点:开发中类.变量特性查询,类型就是类,断言的使用,深浅复制判断等 python脚本文件是使用UTF-8编码的,所以在 ...
- date——sql查询
场景:在数据库中要删除一条记录,但是该记录的唯一性只能通过插入数据库的系统时间来确定,字段为date类型,格式是:2016/10/19 17:17:29. 1 解决 在百度上找到的方法是使用to_ch ...
- (转)流量加速插件 FinalSpeed介绍及一键安装教程
原文章连接:https://blog.kuoruan.com/82.html 1 介绍 官方介绍:FinalSpeed是高速双边加速软件,可加速所有基于tcp协议的网络服务,在高丢包和高延迟环境下,仍 ...
- (转)Spring并发访问的线程安全性问题(高度总结)
下面的记录对spring中并发的总结.理论分析参考Spring中Singleton模式的线程安全,建议先看 spring中的并发访问题: 我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下 ...
- c#中Class和Struct使用与性能的区别
在Unity中很多已经定义为结构体的数据结构 Vector2, Vector3 和 Vector4 Rect Color和Color32 Bounds Touch 1.Class为引用类型,Str ...
- angularjs 选项卡tab切换(移动端用户订单状态)
<!--头部导航tabs切换--> <div class="tabs-striped tabs-top tabs-background-positive tabs-colo ...
- 服务器运行环境部署(PHP)
1.使用的是腾讯云服务器,系统为centOS: 2.LAMP环境配置查看:https://cloud.tencent.com/document/product/213/8043: 3.mysql-se ...
- 暑假集训D9总结
考试 几乎绝望的考试= =,感觉自己啥都打不出来= =,就一道DP打了个贪心,剩下两道骗分,然而竟然排到前一半= =,不可思议= = 真是令人窒息的操作啊= = T1 [bzoj1592] Maki ...