Elsevier爱思唯尔审稿track界面查看进度细节(时间精确到秒)
丶whimmy
编辑于 2024年07月17日 11:52

每当投递给Elsevier的文章通过初审进入审稿阶段,通讯作者一般都会收到track链接(https://track.authorhub.elsevier.com/?uuid=*)用于追踪进度⬇

以up的稿件进度track为例

Track链接反映的信息极为有限,审稿人数量超过2时便会显示2+,有没有办法看到更细节的内容呢?

怀着试一试的心态,UP用F12打开了开发者工具,选中网络刷新页面

网络请求详情

可以看到我们打开track页面由浏览器发起的所有请求。包括网页整体的框架(第一条请求)和各种资源的请求。

我们的track链接中的uid唯一对应了我们的稿件,因此关于我们稿件的详情,就在图中与uid同名的json文件中。

关于审稿进度的详情

JSON中的Date字段即为时间戳形式的日期。接下来我们可以再来点前端小知识,让页面像下面两张效果图一样呈现出来。

我们希望看到的精确的评审条数

精确到秒的时间


不难想到,Elsevier的track页面逻辑是有我们请求到JSON数据并在本地进行处理,然后渲染到页面中,因此基本思路就是找到处理JSON的JS文件,修改其中的代码,并使修改后的代码参与到页面渲染中;

这个关键的JS文件我已经替大家找到了【index.98ce9a5f.js】:

所以我们无法看到2以上的具体数字的罪魁祸首就是下面这行代码:

代码块
JavaScript
自动换行
复制代码
const On = e=>e > 2 ? "2+" : e.toString(); // 这里的e其实就代表reviewEvents
复制成功

那么如何处理便很简单了,我们右键将代码另存一份,可以用记事本打开,然后修改这行代码:删掉判断逻辑,直接显示具体数值

代码块
JavaScript
自动换行
复制代码
const On = e=>e.toString();
复制成功

修改后就能显示具体数值了如果想显示每个详情的具体时间,可以看下一节内容,如果到此就满足需求了,可以跳过下一节,直接看最后一部分内容如何实现本地的JS替换请求中的JS


图中蓝色的代码块负责渲染我们看到的【Reviews xxx: n】这部分内容,可以看到代码中给On(e)函数传入了On(r.getNumberOfReviewerCompletedEvents()),而r实例化的代码就在第一行:const r = new Rn(e,n); 因此我们找到Rn类,好巧不巧,就在这部分代码的上面

我们可以修改getNumberOfEventsForReviewEventName函数实现将审稿进度打印到控制台

代码块
JavaScript
自动换行
复制代码
// 替换原本的getNumberOfEventsForReviewEventName方法
getNumberOfEventsForReviewEventName(e) {
  let detail = this.reviewEvents.filter((t => t.Event === e && t.Revision === this.revision)) // 如果删掉.filter函数的内容,则能看到以往历史审稿信息,例如上次修稿审稿邀请信息等
  detail.forEach((e => {
    e.Date = getFormattedTime(e.Date) // 将Date字段由时间戳转换为字符串
  }))
  console.log(e, detail); // 打印到控制台
  return detail.length
}
复制成功

在class Rn类前添加getFormattedTime函数,这个函数的功能是将时间戳转换为时间信息

代码块
JavaScript
自动换行
复制代码
// 获取更精确的时间信息
const getFormattedTime = (timestamp) => {
  const date = new Date(timestamp * 1000); // 将时间戳转换为毫秒

  const year = date.getFullYear();
  const month = ('0' + (date.getMonth() + 1)).slice(-2); // 月份从 0 开始,需要加 1
  const day = ('0' + date.getDate()).slice(-2);
  const hours = ('0' + date.getHours()).slice(-2);
  const minutes = ('0' + date.getMinutes()).slice(-2);
  const seconds = ('0' + date.getSeconds()).slice(-2);

  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
复制成功

如果删掉let detail = this.reviewEvents.filter((t => t.Event === e && t.Revision === this.revision)) 中.filter函数的内容,则能看到以往历史审稿信息,例如上次修稿审稿邀请信息等。

为了在页面中也显示精确时间,我们需要在当前文件搜索“Last review activity”,找到如下位置,替换_n为getFormattedTime,也就是我们刚刚添加的函数的函数名。

替换这个位置的_n函数

到此代码修改完毕,下面实现用本地代码替换请求中的代码.


我们复制track网址中的域名:track.authorhub.elsevier.com,以此创建一个同名的文件夹,并将修改好的代码移到这里。

PS: 有的浏览器替换规则不一样,可能需要在域名文件夹外再套一层,再选择外层文件夹

回到我们的控制台,进入源代码,选择覆盖(这两项找不到的友友可以点击“》”查看是否被折叠了)打开文件夹选择我们刚刚创建好的文件夹(有的浏览器替换规则不一样,可能需要在域名文件夹外再套一层,再选择外层文件夹),如下图所示

Chrome这里可能是英文的. 我记得是..Source - Override

最后一步:选中【启用本地替代】,再次刷新页面,回到控制台:(网络那一项出现了警告符号就代表替代成功了)

同一个id对应同一个审稿人

更精准的时间显示(上一张效果图那篇文章已经AC了,大家结合这一张看吧)

其他的track页面也能像这样开启本地替代. 到此目的达成


!!!需要注意的两点:

1. 控制台必须保持打开

2. 有的浏览器可能需要在域名文件夹外面要再套一个文件夹,替换操作时选择该文件夹,浏览器才能识别到域名和对应文件