Selenium + C# 实现模拟百度贴吧签到 1

代码直通车 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、后期维护方便

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

P2P网站(人人贷)散标投资数据和借贷人的信息数据爬取

有一篇有关爬取P2P网站上散标投资数据和借贷人的信息数据的博文,整合前人资料(http://sanwen8.cn/p/156w57U.html),说一下爬取中遇...

3394
来自专栏顶级程序员

高效 MacBook 工作环境配置

工欲善其事,必先利其器,工具永远都是用来解决问题的,没必要为了工具而工具,一切工具都是为了能快速准确的完成工作和学习任务而服务。 本文记录 MacBook 整...

7127
来自专栏张戈的专栏

DX-Seo与WP-codebox插件冲突解决方法

这两天折腾代码高亮插件,折腾得够呛!缘由要不就是导致网站爆卡,要不就是点击复制按钮出问题。 这里说下 wp-codebox 和 DX-Seo 插件冲突的现象及解...

2909
来自专栏Java学习网

高效程序员的MacBook工作环境配置

高效程序员的MacBook工作环境配置 本文记录整个配置过程,供新入手 MacBook 和觉得 MacBook 比较难用的同学参考。 1. 硬件提升 笔记本电脑...

2.6K9
来自专栏Material Design组件

Human Interface Guidelines —— Edit Menus

1246
来自专栏CRPER折腾记

Vue 折腾记 - (11) @Vue/Cli 3.0.0 图形化项目管理,相当人性化

点击顶部tab的Create进入初始化界面, 点击Create a new project here进入新项目初始化

1642
来自专栏Danny的专栏

html页面导出为pdf(jsPDF、iText、wkhtmltopdf)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1K1
来自专栏云瓣

迈向新纪元编辑器

第一次听说Atom是半年前天猫的学姐说她在用这款编辑器,期间我从dw到st再到webstorm都分别做了项目~,但是作为一名拥抱开源的FE,怎么能拒绝githu...

3229
来自专栏Java帮帮-微信公众号-技术文章全总结

WordPress你要会用

WordPress你要会用 虽然是PHP开发的,但不能忽律它的简单化 WordPress介绍 WordPress是一种使用PHP语言开发的博客平台,用...

4095
来自专栏腾讯大数据的专栏

iOS9的新特性3D-Touch

Apple在iphone6s中推出了的新特性:3D-Touch,由于相关的文档还比较少,我在学习中总结了一下可能有用的功能点。 1. 什么是3D-Touch ...

20910

扫码关注云+社区