爬虫自动化脚本+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:
https://github.com/ZhangQueque/CrawlerScript
希望这篇优化后的博客对你有所帮助!如果有任何问题或需要进一步优化,欢迎随时联系。
爬虫自动化脚本+AI赋能的更多相关文章
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...
- 脚本AI与脚本引擎
Scripted AI and Scripting Engines 脚本AI与脚本引擎 This chapter discusses some of the techniques you can us ...
- 自动化脚本中click()或sendKeys()没有反应
前提: 排除xpath引用错误或元素的xpath每次都不同的情形. 问题描述 自动化脚本中click()方法和sendKeys()方法报错, 返回异常InvocationTargetException ...
- appium-desktop录制脚本二次开发,生成我司自动化脚本
目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- 【Zabbix】Zabbix-agent自动化脚本
zabbix-agent自动化脚本 作用:批量部署zabbix-agent.用于上百台虚拟机都可以被Zabbix监控. 脚本名:inst-agent.sh #!/bin/bash echo " ...
- PHP学习日记 Windows配置PHP+Nginx+自动化脚本
Windows配置PHP+Nginx+自动化脚本 安装与配置 PHP 下载PHP:传送门 选择合适的版本下载 尽量选Thread Safe 配置PHP: 解压后在文件夹中找到php.ini-devel ...
- 网易云易盾CTO朱浩齐:我们是如何用AI赋能内容安全?
本文由 网易云发布. 5月19日,LiveVideoStack携手网易云易盾,共同打造了“娱乐多媒体开发应用实践”专题,帮助开发者和泛娱乐平台运营人员,提升技术能力,突破难点,拓展思路与视野. 在专 ...
- python_selenium之第一个自动化脚本
python_selenium之第一个自动化脚本 上一节介绍了xpath的使用,接下来完成第一个自动化脚本 一.步骤: 1. 这里使用火狐浏览器,首先打开火狐浏览器 2. 使浏览器窗口最大化 3.输入 ...
- 【转】jenkins上配置robotframeworkride自动化脚本任务
jenkins上配置robotframeworkride自动化脚本任务 编写好的自动化脚本,集成在jenkins上进行自动运行于监控,这里采用分布式构建,在一台slave上进行任务构建与自动化脚本的运 ...
随机推荐
- 强化学习笔记之【SAC算法】
强化学习笔记之[SAC算法] 前言: 本文为强化学习笔记第四篇,第一篇讲的是Q-learning和DQN,第二篇DDPG,第三篇TD3 TD3比DDPG少了一个target_actor网络,其它地方有 ...
- 快速部署mysql并开启binlog
curl -fsSL https://get.docker.com | bash yum -y install docker-ce sudo systemctl start docker sudo s ...
- NDT算法(深蓝学院)
- 数据库系统原理——第三章 关系数据库标准语言SQL
@ 目录 1.SQL的特点 2.SQL的组成 3SQL语句 3.1数据库的基本操作 3.2 基本表的定义.修改.删除 3.3索引的建立与删除 3.4数据更新 3.5数据查询 3.5.1单表查询 3.5 ...
- 一些很好用的SVN功能
1.checkout 1.1 只checkout部分目录和文件 目的:有时候项目的文件很多,但是只会关心其中的某几个文件,就可以只checkout这几个文件,可以缩短checkout时间且减少其他文件 ...
- 基于Java+SpringBoot心理测评心理测试系统功能实现九
一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...
- 题解:CF1015D Walking Between Houses
题解:CF1015D Walking Between Houses 算法 模拟,分类讨论 分析 首先,设每步走的距离为 \(t_i\),我们发现 \(t_i\) 应是满足 \(1\le t_i\le ...
- 超实用!阿里云应用——Air780EP低功耗4G模组AT开发示例
Air780EP是合宙推出的一款低功耗4G全网通模组,兼容模组行业1618经典封装,支持OpenCPU开发及全功能数传AT开发,可广泛应用于多样化的物联网终端. 针对客户朋友需求反馈,本期特别推出 ...
- 异步编程在ArkTS中具体怎么实现?
大家好,我是 V 哥,很好奇,在ArkTS中实现异步编程是怎样的,今天的内容来聊聊这个问题,总结了一些学习笔记,分享给大家,在 ArkTS中实现异步编程主要可以通过以下几种方式: 1. 使用async ...
- BLOG-1
前言 回顾这三次作业的心路历程,可以说每一次都带来了新的挑战与收获,随着题目数量和复杂度的增加,对Java编程的理解和面向对象设计的认知逐步加深.作为Java编程初学者,最初对编程架构.模块分层和错误 ...