前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cypress另类玩法!当爬虫和订票机器人

Cypress另类玩法!当爬虫和订票机器人

原创
作者头像
brzhang
发布2023-12-12 23:07:04
4550
发布2023-12-12 23:07:04
举报
文章被收录于专栏:玩转全栈玩转全栈

Cypress 是一个前端自动化测试工具,专门为现代 web 应用设计。它不仅可以用来做自动化测试,还能处理各种自动化操作,比如模拟用户行为、填写表单、点击按钮等。Cypress 提供了一套丰富的 API,可以轻松地与网页元素交互,执行断言,并监控应用的行为。

cypress 简单的一些特性

  1. 实时反馈:Cypress 测试运行时可以直接在浏览器中看到实时反馈,这对于调试和理解测试流程非常有帮助。
  2. 易于设置和使用:与其他自动化测试工具相比,Cypress 的安装和配置都相对简单。
  3. 时间旅行:Cypress 记录下每一步操作的快照,可以回溯到测试的任何一个状态,方便查看问题发生的原因。
  4. 自动等待:Cypress 会自动等待命令和断言,无需手动添加等待时间。
  5. 网络流量控制:可以拦截和控制应用的网络请求,模拟服务器响应,用于测试不同的场景。
  6. 跨浏览器测试:支持在不同的浏览器环境中运行测试。

Cypress 适合做端到端的测试(E2E Testing),也就是模拟真实用户的操作来验证整个应用是否按预期工作。不过,它主要是针对网页和网页应用的,和他类似的可以操作移动端的工具是,如 Appium 或者 Selenium。

cypress做一个爬虫是个啥意思

Cypress 可以用来模拟用户操作来爬取网页上的结构化信息,尽管它主要是为了测试而设计的,但是,如果你只是想要爬取一些简单的信息,比如网易新闻首页的头条新闻,Cypress 是完全可以搞定的。而且简直就是大材小用了。

首先,我们准备下环境,随便创建一个项目,比如 cypress_test

代码语言:javascript
复制
midir cypress_test
cd cypress_test
yarn add cypress --dev

安装完毕之后 ,执行 ./node_modules/.bin/cypress open

然后,我们就可以看到一个这样的界面,下面,我们就可以开始编写脚本了。

随后我们写一个脚本,去获取到一些相关的结构化信息,比如一个简单的:

代码语言:javascript
复制
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 渲染的问题,这个却可以很好的规避。

订票提示机器人

为了演示,我们使用携程来做示范,但是仅仅提供一个思路,不代表具体可以按照这个方式去实施,大概的思路是:

  • cypress 打开携程官方网站,你可以登录上自己的用户。
  • 随后,你可以通过脚本设置你的目的地,出发地,时间等等。
  • 随后写一个循环去间隔多少秒查询一下机票价格。
  • 你设定一个你期望的价格,如果到了,就赶紧提醒你预定。

当然,为了不给别人的网站造成困扰,我这里给出伪代码,基本上可以表达自己的一个思路。

代码语言:javascript
复制
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);
  // 实际的邮件发送逻辑或其他通知逻辑
}

当然这里的提醒可以是微信机器人,可以是其他的方式。同样的道理,如果你真的下写一个自动订票的机器人,这可能并不是一个最好的方式,而且这种提醒的服务一般携程自己就提供了,如果说有没有其他思路,比如,你还可以选择其他:

  • chrome 插件的方式
  • AutoX.js 也可以了解下,比这个方式要更加简单。
  • AiBote 也可以了解下

方式其实可以思考出更多的出来,就不在此地一一列举了。

总结

Cypress ,不紧紧可以用来做自动化测试,他本质上就是根据用户编写的脚本去自动的执行网页上的一些操作,而且,正是因为 Cypress 还有一个很好的特性,可视化,也就是你可以很轻松的看到这个过程在自动执行,而且还有当某些地方需要登录验证的时候,有一个界面给你认为操作一下,会省去相当多的麻烦。

最后,我们略微思考下,其实让 Cypress 变为爬虫,变成一种可以辅助你订票的工具只是一个开始,而你需要从这里学到的不应该停留在这里,思维不能局限,同时多思考做一件事情能有哪些方式,哪些更加高效,更合适,甚至应用到自己的业务上去解决你之前认为没法解决的问题。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cypress 简单的一些特性
    • cypress做一个爬虫是个啥意思
    • 订票提示机器人
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档