Cypress 是一个前端自动化测试工具,专门为现代 web 应用设计。它不仅可以用来做自动化测试,还能处理各种自动化操作,比如模拟用户行为、填写表单、点击按钮等。Cypress 提供了一套丰富的 API,可以轻松地与网页元素交互,执行断言,并监控应用的行为。
Cypress 适合做端到端的测试(E2E Testing),也就是模拟真实用户的操作来验证整个应用是否按预期工作。不过,它主要是针对网页和网页应用的
,和他类似的可以操作移动端的工具是,如 Appium 或者 Selenium。
Cypress 可以用来模拟用户操作来爬取网页上的结构化信息,尽管它主要是为了测试而设计的,但是,如果你只是想要爬取一些简单的信息,比如网易新闻首页的头条新闻,Cypress 是完全可以搞定的。而且简直就是大材小用了。
首先,我们准备下环境,随便创建一个项目,比如 cypress_test
midir cypress_test
cd cypress_test
yarn add cypress --dev
安装完毕之后 ,执行 ./node_modules/.bin/cypress open
然后,我们就可以看到一个这样的界面,下面,我们就可以开始编写脚本了。
随后我们写一个脚本,去获取到一些相关的结构化信息,比如一个简单的:
describe('Netease News Crawler', () => {
it('Gets the headline news', () => {
// 访问网易新闻首页
cy.visit('<https://news.163.com/>');
// 选择头条新闻的元素,这里的选择器需要根据实际页面结构来确定
// 假设头条新闻的标题都在一个叫做 '.ndi_main' 的 div 下
cy.get('.current').each(($el, index, $list) => {
// 输出新闻标题
console.log($el.text());
});
});
});
这里紧紧只是一个思路,一个新的玩法,不代表这种会比较高效,但是这种比较直观,而且,csr 渲染的网站也是支持的,一般的爬虫可能解决不了 csr 渲染的问题,这个却可以很好的规避。
为了演示,我们使用携程来做示范,但是仅仅提供一个思路,不代表具体可以按照这个方式去实施,大概的思路是:
当然,为了不给别人的网站造成困扰,我这里给出伪代码,基本上可以表达自己的一个思路。
describe('Flight Price Alert', () => {
it('Checks for low price on a flight from Shanghai to Shenzhen', () => {
// 访问携程机票查询页面
cy.visit('<https://fligxxhts.xxxm/online/channel/domestic?arex-record-id=AREX-10-42-19-205-22656049280411769>');
// 输入出发城市
cy.get('input[placeholder="城市或机场"]').first().type('上海');
// 输入目的城市
cy.get('input[placeholder="城市或机场"]').last().type('深圳');
// 选择日期等其他必要信息...
// 提交搜索
cy.get('button').contains('搜索').click();
// 等待搜索结果
cy.wait(10000); // 等待时间可能需要根据实际情况调整
// 分析搜索结果并找到价格信息
cy.get('.flight-list').find('.price').then($prices => {
const prices = [...$prices].map(el => parseFloat(el.innerText.replace('¥', '')));
const lowestPrice = Math.min(...prices);
// 设定一个预期的低价阈值
if (lowestPrice < 500) {
// 如果发现低价,发送提醒
alertUser('发现低价机票:¥' + lowestPrice);
}
});
});
});
function alertUser(message) {
// 这里可以使用 Node.js 发送邮件或者其他方式通知
console.log(message);
// 实际的邮件发送逻辑或其他通知逻辑
}
当然这里的提醒可以是微信机器人,可以是其他的方式。同样的道理,如果你真的下写一个自动订票的机器人,这可能并不是一个最好的方式,而且这种提醒的服务一般携程自己就提供了,如果说有没有其他思路,比如,你还可以选择其他:
方式其实可以思考出更多的出来,就不在此地一一列举了。
Cypress ,不紧紧可以用来做自动化测试,他本质上就是根据用户编写的脚本去自动的执行网页上的一些操作,而且,正是因为 Cypress 还有一个很好的特性,可视化,也就是你可以很轻松的看到这个过程在自动执行,而且还有当某些地方需要登录验证的时候,有一个界面给你认为操作一下,会省去相当多的麻烦。
最后,我们略微思考下,其实让 Cypress 变为爬虫,变成一种可以辅助你订票的工具只是一个开始,而你需要从这里学到的不应该停留在这里,思维不能局限,同时多思考做一件事情能有哪些方式,哪些更加高效,更合适,甚至应用到自己的业务上去解决你之前认为没法解决的问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。