如果要做百度文库,百度贴吧,百度知道签到,你,会怎么做?前不久我还会觉得这好像太麻烦了,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

dotnet使用Selenium执行自动化任务的更多相关文章

  1. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  2. Selenium执行测试脚本稳定性的一些经验分享交流

    Selenium执行测试脚本稳定性的一些经验分享交流 公司的自动化WEB测试框架IATA已上线运行了一段时间,期间发现一些脚本稳定性的问题,与大家分享一下. CASE执行游览器:ie firefox ...

  3. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

  4. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  5. 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(下)

    写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...

  6. Selenium Web 自动化 - 如何找到元素

    Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...

  7. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作  1.1 用webdriver打开一个浏览器  1.2 最大化浏览器&关闭浏览器 ...

  8. Selenium Web 自动化 - 项目实战环境准备

    Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG  1.1 安装TestNG  1.2 添加TestNG类库2 部署Maven  2.1 mav ...

  9. Selenium Web 自动化 - 项目实战(一)

    Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...

随机推荐

  1. Java Listener pattern 监听者模式

    Java Listener pattern 监听者模式 2016-5-12 监听者模式(观察者模式)能降低对象之间耦合程度.为两个相互依赖调用的类进行解耦. 便于进行模块化开发工作.不同模块的开发者可 ...

  2. xdu_1064:Desolator in RA2

    问题转化为,单个面积*2-交面积.下面求交面积.把直角坐标系中全部转90°,每个方块的坐标都做相应变化,这样会发现新的坐标系中空出了一部分方块,找规律发现,若求交矩形包含的方框数,其中恰好一半是前面空 ...

  3. Work 3(工作类) (2017.07.01)

  4. 机器学习 —— 基础整理(五)线性回归;二项Logistic回归;Softmax回归及其梯度推导;广义线性模型

    本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 闲话:二项Logistic回归是我去年入门机器学习时学的第一个模 ...

  5. (转)Spring Boot Junit单元测试

    场景:在项目开发中要测试springboot工程中一个几个dao和service的功能是否正常,初期是在web工程中进行要素的录入,工作量太大.使用该单元测试大大减小了工作强度. Junit这种老技术 ...

  6. Java 学习内容总结

    最近对Core Java基础做了一些学习.有自己的见解,也有别人的总结,供大家参考. 1 实现多线程的方式有几种? 其实这个问题并不难,只是在这里做一个总结.一共有三种. 实现Runnable接口,并 ...

  7. 关于javacc的认识

    http://www.cnblogs.com/Gavin_Liu/archive/2009/03/07/1405029.html

  8. 关于解决mysql数据库乱码的问题

    最近在开发的过程中频繁的使用到了mysql'这款数据库,mysql的中文乱码问题一直让人头疼.以前遇到过几次,但是都一不小心就解决了,这次终于明白到底是怎么回事了.可能我下面手的这种解决方案只适合于我 ...

  9. Nginx+keepalive局域网其它主机ping vip不通

    有两台高可用server server1  192.168.11.10 server2  192.168.11.11 vip :192.168.11.12 配置好keepalive之后在server1 ...

  10. 高效搭建lnmp环境

    1:安装nginx       sudo apt-get install nginx       检测 nginx   : sudo nginx -t  出现如下表示成功        2:安装配置m ...