代码直通车
Github FoxCrawler项目下的SeleniumClawer解决方案

工具介绍

Selenium:是一个自动化测试工具,封装了很多WebDriver用于跟浏览器内核通讯,我用开发语言来调用它实现PhantomJS的自动化操作。它的下载页面里有很多东西,我们只需要Selenium Client,它支持了很多语言(C#、JAVA、Ruby、Python、NodeJS),按自己所学语言下载即可。

下载地址:http://docs.seleniumhq.org/download/

Nuget 使用

image.png

Selenium的好处
Selenuim的好处是显而易见的,当我们爬取网站信息时候,难免会碰到异步加载,数据延时绑定,数据接口定位难,加密信息解码难等问题。其实最终数据都会完整的显示在界面上,既然数据能够显示出来,使用Selenium操控WebDriver进行模拟浏览器行为(点击,切换,移动)等等事件,等待数据显示,然后使用选择器(Id,Class,XPath等)进行爬取,这是一种符合人习惯的编程方式。当然我也不是说其他的方式不好,只是在同等时间的情况下,这种方式效率更高,耗时更快,可靠性也更高。

下面使用Selenium进行一个简单的百度贴吧一键签到功能编码

项目创建,环境配置

打开Vs,新建控制台项目,使用Nuget获取最新Selenium的C#库,然后根据自己机型安装的浏览器选择WebDirver(有点类似运行时打开的模拟浏览器,不过时单独的一个.exe文件,首先你电脑要安装这个浏览器),我以自己的电脑Chrome浏览器为例子,所以我Nuget下载一个

chrome.webdriver.png

下载完成后在项目根目录的packages文件夹中找到对应内容
根据系统类型,系统是32还是64自行选择

路径.png

复制.exe文件到项目Bin文件夹下即可,环境配置完成

先来一下简单例子

在完成一键签到功能之前,我们先来完成一个简单的例子,这样能让大家对这种方式有一个基本的了解
我的例子选取的是某学校的通知公告数据爬取,进行一般爬虫和Selenium爬取的区别

爬取地址
http://www.jit.edu.cn/myNews_list_out.aspx?infotype=1

截图.png

普通方式爬取

我们首先要分析如何获取数据,当我们点击下一页的时候,我们发现页面整体刷新,且地址栏没有发生变化,通过分析Respons信息我们发现IIS字样,这样可以推定使用的技术是.net webform 自带的gridview服务端控件,这种方式自带了加密验证,破解的方式网上有,就是要获取每次页面生成的加密码,然后带上其他参数向后台重新发起请求。
缺点:
如果使用这种方式,当我们碰到不同的问题,需要根据不同的问题寻找解决方案,测试可行然后再进行编码,要花多的时间在一个一个没有接触过的问题身上。

Selenium 模拟爬取

这种方式就相对简单,也很好理解。编码的逻辑就是如下
1、打开网页
2、找到下一页按钮
3、模拟点击
4、数据获取
这样的方式就和我们使用浏览器操作习惯一置,逻辑也更加清楚。

接下去我就基于这一种方法,对代码进行说明

打开网页

            var docHtml = new HtmlDocument();var driver = new ChromeDriver();driver.Navigate().GoToUrl("http://www.jit.edu.cn/myNews_list_out.aspx?infotype=1");

业务逻辑
代码简单明了,爬取当页数据,然后找到下一页按扭,如果存在点击,如何不存在,退出循环

            bool nextpage = true;do{ReadOnlyCollection<IWebElement> newsNodes =driver.FindElements(By.XPath("//*[@id=\"table_list\"]/li/a")); //获取li内容GetNewList(newsNodes);//获得新闻内容docHtml.LoadHtml(driver.PageSource);//找到下一页按钮HtmlNode node = docHtml.GetElementbyId("nextpage");IWebElement element = null;if (node != null){element = driver.FindElementById("nextpage");}else{nextpage = false;}//如果存在下一页按钮,模拟点击if (nextpage){element.Click();}} while (nextpage);

获取新闻内容

    private static List<NewInfo> GetNewList(ReadOnlyCollection<IWebElement> newsNodes){List<NewInfo> newInfoList = new List<NewInfo>();foreach (var news in newsNodes){newInfoList.Add(new NewInfo(){Url = news.GetAttribute("href"),Title = news.Text});Console.WriteLine($"{news.Text} {news.GetAttribute("href")}");}return newInfoList;}

好处:
1、代码简单明了
2、逻辑清晰
3、后期维护方便

Selenium + C# 实现模拟百度贴吧签到 1相关推荐

  1. python 在软件自己自动输入-Python模拟百度自动输入搜索功能的实例

    如下所示: # 访问百度,模拟自动输入搜索 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要 ...

  2. chrome frame节点 取_爬虫3-下(利用Selenium + Chrome Driver模拟用户操作浏览器)

    一.前言 前面利用request的方法爬取页面数据的操作,今天用另外一种方法:利用Selenium + Chrome Driver模拟用户操作浏览器,来爬取数据. 在此之前需要做一些准备工作:安装se ...

  3. 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1

    孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案 ...

  4. Java Selenium简单浏览器模拟

    Java Selenium简单浏览器模拟 模拟登陆QQ邮箱为例 Maven中pom.xml配置: <?xml version="1.0" encoding="UTF ...

  5. 360浏览器模拟百度搜索引擎蜘蛛访问

    一般用在网站被挂马以后,直接访问没有问题,可以通过模拟百度或其他搜索引擎来访问,即可发现问题.比如下面的例子,直接访问没问题,使用模拟搜索引擎访问即可发现问题. 比如访问一个针对搜索引擎挂马的网页:h ...

  6. java怎样模拟点击网页,笔者操作Java+selenium实现网站模拟点击和页面数据爬取

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java+selenium实现网站模拟点击和页面数据爬取的问题,如果我们遇到了Java+selenium实现网站模拟点击 ...

  7. html 模拟百度和模拟360

    百度搜索java的url https://www.baidu.com/s?wd=java &rsv_spt=1&rsv_iqid=0x9f31aa5c00116d2b&issp ...

  8. win爬取网址获取宵宫语音,使用python的selenium库来模拟点击

    前言:经过大量的收集资料,发现因为seleuninm的更新,所有的教程都各不相同,因此自己花了半天时间学习了完整的一个爬取过程,并分享一个用Chrome爬取的示例. 一.环境准备 python> ...

  9. 如何邀请好友注册您的网站(模拟百度网盘)

        花了一年时间做了个网盘下载站点,有兴趣的朋友可以看看站名:去转盘网 其中有个需求是想模拟百度网盘的邀请好友注册功能,想了很久果然 "皇天不负有心人" ,终于整理出个思路,并 ...

  10. php 模拟蜘蛛,PHP模拟百度蜘蛛,伪造IP爬行网站,附源代码

    PHP模拟百度蜘蛛,伪造IP爬行网站,附源代码 // 关闭PHP报错 error_reporting( E_ALL^E_NOTICE^E_WARNING ); //实现使用curl模拟百度 蜘蛛进行采 ...

最新文章

  1. css层叠样式表(一)
  2. 洛谷P4216 [SCOI2015]情报传递(树剖+主席树)
  3. java字符串的替换replace、replaceAll、replaceFirst的区别
  4. linux tomcat 日志路径,linux日志文件在哪 linux安装tomcat
  5. 我----大抵是个废人
  6. POJ - 2411 Mondriaan's Dream(状压dp)
  7. MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?
  8. Java快速开发平台——JEECG 3.7.8 版本发布!我们的目标是有鱼丸也有粗面
  9. 图解TCPIP-ICMP
  10. java抽象方法特点_java-抽象类的特点
  11. Django访问静态资源
  12. 新版PassXYZ已上线,新增一次性密码(OTP)管理功能
  13. Java static关键字与静态块
  14. Redis连接报错【redis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password 】
  15. 关于盗墓笔记的那些事
  16. 越来越多的Java程序员转行Java大数据...
  17. arm开发板移植ALSA库与ALSA工具
  18. CentOS7系统下Java环境和tomcat的安装
  19. mysql gui vim_Vim 有什么奇技淫巧?
  20. Kaggle新赛:Lyft 自动驾驶运动预测,发布迄今最大预测任务数据集

热门文章

  1. 无限条码扫描枪,手机充当扫描器
  2. autojs 图片查找比对
  3. 中职计算机说课稿三篇,中职计算机说课稿三篇.docx
  4. 中级计算机证书知识,计算机中级考哪些内容
  5. 计算机中级培训感言,计算机中级培训培训感言
  6. 迅捷PDF在线转换器将PDF增加密码的简单方法
  7. 目标检测-ImageAI从安装到使用详解
  8. java 跨站脚本攻击_XSS(跨站脚本攻击)漏洞解决方案
  9. ftp工具哪个好,推荐8个超级好用而且免费的ftp工具,支持中文版windows系统的。
  10. 计算机科学与技术的研究背景,计算机科学与技术发展背景