爬虫自动化脚本+AI赋能
简介
估计大家对网页爬取和数据抓取已经有所了解,市面上也有许多现成的软件可供使用。例如,前几天群里有位朋友利用爬虫技术抓取了AV网站,并搭建了一个磁力链接站点😂。
本文将介绍如何模拟手动操作,将一些繁琐的固定操作转化为自动化流程。
声明
本文仅分享编写自动化脚本的心得,与其他内容及本人无关。
!!!
为了顺利发表文章,本文将展示如何登录博客园账号,并打印出所有评论。
亮点包括:
- 如何绕过登录时的验证码?
- 如何获取未经过 SSR 渲染且需要认证的评论列表?
这些奇淫技巧一应俱全,学习后受益匪浅,切记珍惜!
教程
1. 安装自动化脚本包
在项目文件中添加以下包引用:
<ItemGroup> <PackageReference Include="HtmlAgilityPack" Version="1.11.54" /> <PackageReference Include="Selenium.WebDriver" Version="4.13.1" /> </ItemGroup>
2. 登录
使用以下 C# 代码进行登录操作:
// 输入账号 IWebElement accountElement = webDriver.FindElement(By.CssSelector("#mat-input-0")); accountElement.SendKeys(account); var element_account = accountElement.GetAttribute("value"); // 输入密码 IWebElement passwordElement = webDriver.FindElement(By.CssSelector("#mat-input-1")); passwordElement.SendKeys(password); var element_password = passwordElement.GetAttribute("value"); // 核对账号密码是否正确输入 if (account != element_account || password != element_password) { throw new Exception("页面账号密码输入有误!"); }
3. 点击验证按钮
// 点击登录按钮 IWebElement loginBtnElement = webDriver.FindElement(By.CssSelector(@"body > app-root > app-sign-in-layout > div > div > app-sign-in > app-content-container > div > div > div > form > div > button")); loginBtnElement.Click(); // 第一次点击,弹出验证 // 点击验证按钮 IWebElement verifyBtnElement = webDriver.FindElement(By.CssSelector(@"#rectMask")); // 注意:需要隐藏自动化特征,详见第27行代码 verifyBtnElement.Click();
4. 获取评论的三种方式
之所以提供三种方式,是因为部分网站对自己的接口进行了反自动化验证,但第三方接口通常可行!
4.1 通过页面元素爬取
IWebElement tableElement = webDriver.FindElement(By.XPath(@"/html/body/cnb-root/cnb-app-layout/div[2]/as-split/as-split-area[2]/div/div/cnb-spinner/div/cnb-comment-main/cnb-spinner/div/div[2]/table")); // 提取表格主体 IWebElement tbody = tableElement.FindElement(By.TagName("tbody")); IList<IWebElement> rows = tbody.FindElements(By.TagName("tr")); // 初始化列表存储表格数据 List<string> tableData = new List<string>(); foreach (var row in rows) { IList<IWebElement> cells = row.FindElements(By.TagName("td")); // 处理表头单元格 if (cells.Count == 0) { cells = row.FindElements(By.TagName("th")); } List<string> cellTexts = new List<string>(); foreach (var cell in cells) { string cellText = cell.Text.Trim(); cellTexts.Add(cellText); } // 使用管道符作为分隔符,避免与数据中的逗号冲突 string rowData = string.Join(" | ", cellTexts); tableData.Add(rowData); } // 输出提取的数据 foreach (var row in tableData) { Console.WriteLine(row); }
4.2 直接请求接口获取
// 导航到接口地址 webDriver.Navigate().GoToUrl(CnBlogs.CommentsGetApi); var data = webDriver.PageSource; Console.WriteLine(data);
4.3 伪造 HTML 元素,执行 Fetch 脚本获取内容
webDriver.Navigate().GoToUrl(CnBlogs.CommentsUrl); IJavaScriptExecutor executor = (IJavaScriptExecutor)webDriver; executor.ExecuteScript(@" var container = document.createElement('div'); container.id = 'hiddenDataDiv'; container.style.display = 'none'; document.body.appendChild(container); fetch('https://i.cnblogs.com/api/feedback/1?mine=false', { headers: { 'accept': 'application/json, text/plain, */*', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'priority': 'u=1, i', 'sec-ch-ua': '\"Microsoft Edge\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '\"Windows\"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin' }, referrer: 'https://i.cnblogs.com/comments', referrerPolicy: 'strict-origin-when-cross-origin', method: 'GET', mode: 'cors', credentials: 'include' }) .then(response => response.json()) .then(data => { document.getElementById('hiddenDataDiv').textContent = JSON.stringify(data); }) .catch(error => console.error('Error:', error)); "); string jsonData = executor.ExecuteScript("return document.getElementById('hiddenDataDiv').textContent;").ToString(); Console.WriteLine(jsonData);
小彩蛋
博客园的登录 Bug
AI赋能
复杂的验证码场景可以通过 AI 多模态模型解决,例如定位元素和移动鼠标等操作。此外,AI 还可以用于整理和分析数据,提高数据处理效率。
源码链接(可直接运行)
本项目基于 .NET 5 和 Edge 浏览器开发,源码已上传至 GitHub:
我自是年少,韶华倾负。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~