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 编写代 ...
随机推荐
- box-shadow阴影详解
每次使用box-shadow,都要查阅资料才能实现对应的效果,现在总结一下,方便以后查看. 使用语法: element{box-shadow: inset x-offset y-offset blur ...
- 使用 VS2017 和 js 进行桌面程序开发 - electron 之 Hello Word
现在基于 js 和 web浏览器核心构建的 C/S 程序越来越多,比如微信桌面版(基于 duilib 和 cef).VS CODE(基于electron)等,出于了解的目的,最近学习了 electro ...
- 浅谈viewport
我们通常在写移动端页面时,往往都会在html页面中加入这样一段话 <meta name="viewport" content="width=device-width ...
- docker~写个容器启动的bash脚本
回到目录 bash脚本在linux里就相当于win里的bat和cmd及ps脚本,可以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本 ...
- JDK+Tomcat+Zookeeper+DubboAdmin安装教程
JDK+Tomcat+Zookeeper+DubboAdmin安装教程 1. 安装内容: JDK 1.8.131 Tomcat 7.0.77 Zookeeper 3.4.9 Dubbo admin 2 ...
- 新一代开源Android渠道包生成工具Walle
本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...
- CONSOLE_SCREEN_BUFFER_INFO 结构体
CONSOLE_SCREEN_BUFFER_INFO结构体 来源:https://msdn.microsoft.com/en-us/library/ms682093(v=vs.85).aspx 作用 ...
- Unity Shader入门教程(四)反射光斑的实现
本节内容介绍PhongModel(也就是上文说的反射光的计算模型),采用的计算方法是BlinPhong(也即是用视线方向V+光源方向L的和,与N做点积,随后幂化得到高光反射系数)下图采用了csdn博文 ...
- 使用VMware安装CentOS
使用VMware安装CentOS 第1步:首先安装VMware Workstation,只需点下一步即可,安装过程略 第2步:文件 → 新建虚拟机 或 直接点击 创建新的虚拟机 图标 第3步:选择 典 ...
- 如何查看appache的端口是否被占用
win + R 快捷键输入 cmd 打开命令行. 输入 netstat -ano 查看端口使用情况 Ctrl + Shift + Esc 打开 windows 任务管理器,依次单击 [查看][ 选择列 ...