手机版

用木偶师抓取网站 捕捉404个无效链接

时间:2021-08-28 来源:互联网 编辑:宝哥软件园 浏览:

检查网页是否有无效链接

前言

自动化技术可以帮助我们做自动化测试,也可以帮助我们完成其他事情,比如今天检查404网站的无效链接。

原则

要实现这个功能,大致可以分为以下几个步骤:1。打开官网首页,获取页面所有链接。2.添加规则来过滤这些链接并移除外部链接。3.遍历并访问这些链接,打开每个链接,检查它是否是404,如果是向下的距离。4.重复1、2和3。直到遍历了整个网站的所有链接。

准备好

CukeTest是一个可以专业编辑自动化脚本的工具。cuketest.com/

木偶师是一个非常受欢迎的自动化图书馆。https://github.com/GoogleChrome/puppeteer

实现

在CukeTest中创建新项目。

删除功能目录。创建新的demo.js文件。

安装木偶师

解释npm安装木偶师-保存主要方法

pupputeer内置了监听事件,可以快速得到每个请求的响应结果。

木偶师可以创建一个铬实例。创建如下:

让木偶师=require('木偶师');browser=wait puppeter . launch({ headless : true });page=wait browser . NewPage();wait browser . close();木偶师提供事件监控,可以监控每个页面的响应状态,为每个请求添加一个响应事件,如果响应状态代码为404,则记录在一个文件中。

page.on('response ',(res)={ //console.log('res.url ',res.url(),res.status())让URL=RES . URL();if(RES . status()==404){ linktoFile(URL,broken link file);} else { if(isfaildurl(URL)){ linktoFile(URL,validUrlFilePath);}}}) puppet抓取页面上的所有链接

wait page . goto(URL);//get all link const href=await page . evaluate(()=array . from(document . body . queryselectorall(' a[href]),({ href })=href));记录文件链接或从文件读取链接的方法

让filetolink=function(file path){ if(!fs.existsSync(文件路径)){ fs.writeFileSync(文件路径);}让数据=fs.readFileSync(filepath,' utf-8 ')让链接=data.trim()。拆分(' \ n ');返回链接;}让linktoFile=function (link,filepath) {让foundLinks=filetolink(file path);if(!foundlinks . includes(link)){ fs . appendfilesync(file path,link ' \ n ');}}最终代码

让木偶师=require('木偶师');const fs=require(' fs ');const path=require(' path ');const host=' http://www。xxxx。cn/';//被测网站const已访问文件='已访问网址。txt ';//浏览过的页面const visitedFilePath=路径。join(_ dirname,visitedFile);const断开的链接文件='断开的链接。txt ';//404链接const断开链接文件路径=路径。join(_ dirname,断开的链接文件);const validUrlFile=' validUrlFile。txt ';//可用的链接const validUrlFilePath=路径。join(_ dirname,validUrlFile);让浏览器;让页面;函数isaildurl(url){返回URL。以(主机)开头!网址。包括('/# ');}异步函数run(){ browser=wait puppet。发射({无头: true });page=等待浏览器。new page();page.on('response ',(res)={ //console.log('res.url ',res.url(),res.status())让URL=RES . URL();让当前网址=页面。URL()if(RES . status()==404){ linktoFile(当前URL '=' URL,brokenlinkFilePath);} else { if(is fail durl(URL)){ linktoFile(URL,validUrlFilePath);} } })等待visitPage(浏览器、页面、主机);等待浏览器。close();}异步函数visitPage(浏览器、页面、url) { //if(!isfaildur(URL))返回;等待页面。转到(网址);//获取所有的link const href=等待页面。计算(()=数组。来自(文档。尸体。queryselectorall(' a[href]'),({ href })=href));for(const href of href){//数据清洗if(isaildurl(href)href!==主机){ //符合条件的link //linktoFile(href,visitedFilePath);让RES=等待页面。goto(href);if(RES . status()==404){ linktoFile(href,brokenlinkFilePath);} else { let visited links=filetolink(visitedFilePath);if(!访问者链接。包括(href)){ linktoFile(href,visitedFilePath);等待visitPage(浏览器、页面、href);} } let links=filetoLinks(visitedFilePath);if(!链接。包括(href)){等待访问页面(浏览器,页面,href);} } } }让filetolink=函数(文件路径){ if(!fs.existsSync(文件路径)){ fs.writeFileSync(文件路径);}让数据=fs.readFileSync(文件路径,' utf-8 ')让链接=data.trim().拆分(' \ n ');返回链接;}让linktoFile=函数(链接,文件路径){ 0让foundLinks=filetolink(文件路径);if(!foundlinks。包括(链接)){ fs。appendfilesync(文件路径,链接' \ n ');} } run();运行

点击【运行】按钮即可运行。同样,在CukeTest中也支持命令行执行,执行命令为

cuke - runjs demo.js以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:用木偶师抓取网站 捕捉404个无效链接是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。