C#-Selenium爬虫抓取(二)

本文介绍了如何使用C#和Selenium进行网络爬虫开发,通过Cookie跳过登录验证,实现自动化信息抓取。代码示例中展示了如何设置URL、Cookie地址、Driver驱动,以及抓取和保存页面内容的方法,特别针对需要登录和有反爬机制的网站。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

C#-Selenium爬虫抓取(一)
本文是对前文的一个完善,主要内容是通过Cookie跳过登录,并实现自动化信息抓取。
首先我们要去找到Cookie的地址,在地址栏输入 chrome://version/
在这里插入图片描述
其中的个人资料路径,去掉Default,就是我们的Cookie地址。

前端页面与逻辑设计

在这里插入图片描述
先简单画个界面,主要的设置分别为:URL、Cookie地址、Driver驱动地址(可见前文)、抓取目标、抓取结果保存地址。
逻辑设计上,我们通过Driver读取Cookie并直接打开到目标页面,直接开始元素信息抓取,如有需要则自动翻页抓取。
在这里的设计主要是针对一些反爬机制的处理:
1.需要登录验证
2.翻页时URL不变
3.从初始页面到目标页面过于复杂

代码块分析

变量:

            public static string adressofprofile;//cookie缓存地址
            public static string adressofdriver;//驱动地址
            public static string saveadress;//保存地址(txt)
            public static string PageNext;//点击下一页的元素Id名
            public static string searchname;//搜索元素名
            public static int page;//需要抓取内容的页码量

为驱动加载cookie跳过登录:

string headofprofile = "--user-data-dir=";
string profile_directory = headofprofile + adressofprofile;
ChromeOptions options = new ChromeOptions();
options.AddArguments(profile_directory);

页面翻查搜索(根据元素名查找)并保存内容:

for (int j = 0; j <= page; j++)
 {
     Thread.Sleep(2000);
           try
               {
                for (int i = 0; i < 1000; i++)
                 {
                    str = driver.FindElementsByClassName(searchname)[i].Text;
                    using (StreamWriter writer = new StreamWriter(saveadress, true))
                            {
                                        writer.WriteLine(str);
                            }

                 }
               }
            catch { }
            driver.FindElementById("PageNext").Click();
                                
}

实例测试

我们随便找个网站做一个简单的测试:
1.人工检查网页信息
在这里插入图片描述

2.输入参数开启程序,可以看到自动操控扫描过程
在这里插入图片描述
3.抓取结果:
在这里插入图片描述

完整代码

public void GetHtml(string url)
            {
                PhantomJSDriverService driverService = PhantomJSDriverService.CreateDefaultService();
                driverService.IgnoreSslErrors = true;
                string headofprofile = "--user-data-dir=";
                string profile_directory = headofprofile + adressofprofile;
                ChromeOptions options = new ChromeOptions();
                options.AddArguments(profile_directory);
                string str;
                List<String> tagNmaeList = new List<string>();
                using (driver = new ChromeDriver(adressofdriver, options, TimeSpan.FromSeconds(120)))
                {
                   
                    try
                    {
                        driver.Manage().Window.Maximize();
                        driver.Navigate().GoToUrl(url); 
                        Thread.Sleep(5000);
                        for (int j = 0; j < page; j++)
                            {
                            Thread.Sleep(2000);
                            try
                            {
                                for (int i = 0; i < 1000; i++)
                                {
                                    str = driver.FindElementsByClassName(searchname)[i].Text;
                                    using (StreamWriter writer = new StreamWriter(saveadress, true))
                                    {
                                        writer.WriteLine(str);
                                    }

                                }
                            }
                            catch { }
                                driver.FindElementById(PageNext).Click();
                                
                            }
                       
                       
                    }
                    catch (NoSuchElementException)
                    {
                        Console.WriteLine("找不到该元素"); ;
                    }
                }

            }

注意前后文,经测试直接使用没问题。可以按自己的需要做一些补充,同时建议把所有前端textbox块,用config自动保存。
注意事项:测试时把浏览器关闭,避免占用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值