C#-Selenium爬虫抓取(一)

前言

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。他能支持主流编程语言,以及拥有多种浏览器驱动。
用C#写爬虫确实是不方便,网上的资料也相对较少,但懒得配python的环境,所以选用了C#。本文用C#做了一些爬虫抓取的尝试,包括登录、抓取信息,筛选信息。Selenium的用法都是相同的,基础的操作用什么语言来写没什么差别,操作方法与逻辑也都可以在别的语言直接实现。
原理与逻辑:通过代码指令,识别分析前端语言并代替人手动操作如点击、输入、选择等操作,相比于人手更加的具有复用性,准确性。常用于定时签到(抢票类),以及大量的数据选取等操作。

环境与配置

选用Winform框架,配置Driver驱动:
在这里插入图片描述
引用(自动添加即可):

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.PhantomJS;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;

chromedriver版本驱动安装
先Chrome检查版本号
在这里插入图片描述

并于http://chromedriver.storage.googleapis.com/index.html
下载对应版本驱动,添加下环境变量,安装位置在下述代码中用于启动驱动。

代码块示例

public void GetHtml(string url)
            {
                PhantomJSDriverService driverService = PhantomJSDriverService.CreateDefaultService();
                driverService.IgnoreSslErrors = true;
                ChromeOptions options = new ChromeOptions();
                options.AddArgument("--headless");
                options.AddArgument("--nogpu");
                //options.AddArguments(profile_directory);
                List<String> tagNmaeList = new List<string>();
                using (driver = new ChromeDriver(@"C:\Users\Downloads", options, TimeSpan.FromSeconds(120)))//启动驱动
                {
                    //Login(driver);
                    try
                    {
                        driver.Manage().Window.Maximize();
                        driver.Navigate().GoToUrl(url);
                        Thread.Sleep(5000);
                        string js1 = "login-qrcode__title__right";
                        string js2 = "js-tab-password-login";
                        string js3 = "js-login-btn";
                        //点击按钮
                        driver.FindElementByClassName(js1).Click();
                        driver.FindElementByClassName(js2).Click();
                        driver.FindElementsByClassName("zent-checkbox")[0].Click();//对勾选框的选择
                        driver.FindElementsByClassName("zent-checkbox")[1].Click();
                       //输入账号密码
                        driver.FindElementByClassName("zent-input").SendKeys("10001");
                        driver.FindElementByName("password").SendKeys("1234567");
                        Thread.Sleep(200);
                        driver.GetScreenshot().SaveAsFile("C:\\Users\\Desktop\\WebScreen.PNG",System.Drawing.Imaging.ImageFormat.Png);
                        driver.FindElementByClassName(js3).Click();
                        Thread.Sleep(200);//线程等待载入
                        Console.WriteLine(driver.PageSource); //输出网页源码
                        System.IO.File.WriteAllText(@"C:\Users\Desktop\WriteLines.txt", driver.PageSource);//输出到txt
                    }
                    catch (NoSuchElementException)
                    {
                        Console.WriteLine("找不到该元素"); ;
                    }
                }

            }
        }

各项动作功能介绍

元素检查示例

1.通过元素识别
1.1通过类名识别,并点击:

driver.FindElementByClassName(str).Click();

如果是多项同名类,我们可以按序号来抓取到:

driver.FindElementsByClassName(str)[0].Click();
//注意差别           

1.2通过其他方式识别,如id等,如下:
在这里插入图片描述
2.识别元素后的操作
2.1密码块输入示例:

driver.FindElementByName("password").SendKeys("1234567");

2.2其他操作:
例如通过text抓取信息等
在这里插入图片描述
3.抓取页面信息
截取信息块PageSource输出:

System.IO.File.WriteAllText(@"C:\Users\Desktop\WriteLines.txt", driver.PageSource);//输出到txt

截图检查网页情况:

driver.GetScreenshot().SaveAsFile("C:\\Users\\Desktop\\WebScreen.PNG",System.Drawing.Imaging.ImageFormat.Png);

截取到的登录页面示例如下:
截图检查示例

如此,便可以让驱动开始进行点击、输入等交互动作,从而完成页面跳转、登录,初步的抓取。抓取结果其实就是你在网页检查中看到的源代码,你需要获取的信息会夹在源代码中。

注意事项

1.url与类名的准确性,这个不用多说。
2.驱动的版本对应问题:
如果有这种问题,说明驱动版本号不对应,去Chrome检查版本号,按前文说明重新安装一下。
在这里插入图片描述
3.登录问题
登录过程中可能有其他的反爬机制,例如验证码与人机验证框,可以通过cookie跳过登录过程,这个以后再更新。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值