mcpField
G
gs-navigate-pages

gs-navigate-pages

github.com/cookjohn生产力538159 次安装33 周前更新
代码仓库

关于 gs-navigate-pages

这项 Google Scholar 导航技能用于翻阅搜索结果页面。它依赖此前搜索的上下文,并提取和汇报指定页面的结果。

主要功能

  1. 01前往上一页或下一页
  2. 02跳转到指定页码
  3. 03更新搜索 URL 的分页参数
  4. 04提取并汇报页面结果

适用场景

  1. 01查看下一页搜索结果
  2. 02返回较早的结果页
  3. 03打开此前搜索中的指定页面

MCP 相关

该技能使用 Chrome DevTools MCP 的 navigate_page 工具打开更新后的 Google Scholar URL。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cookjohn/gs-skills --skill gs-navigate-pages

安装后在 Claude Code 中输入/gs-navigate-pages确认已加载。

详细介绍

Google Scholar 页面导航

导航搜索结果页面。需要此前调用 gs-search 或 gs-advanced-search 提供的上下文。

参数

$ARGUMENTS 可以是:

  • next — 转到下一页
  • previous — 转到上一页
  • page N — 转到第 N 页

前置条件

此技能需要此前搜索提供的上下文:

  • currentUrl:当前 Google Scholar 搜索网址
  • page:当前页码(从 1 开始)

步骤

1. 计算新网址

Google Scholar 使用 start 参数进行分页(从 0 开始索引,每次递增 10):

  • 第 1 页:start=0(也可以省略)
  • 第 2 页:start=10
  • 第 3 页:start=20

根据 $ARGUMENTS:

  • next:newStart = currentStart + 10
  • previous:newStart = max(0, currentStart - 10)
  • page N:newStart = (N - 1) * 10

修改当前搜索网址中的 start 参数。如果网址中不存在 start,则追加 &start={newStart}。

2. 导航

使用 mcp__chrome-devtools__navigate_page 和更新后的网址。

3. 提取结果(evaluate_script)

与 gs-search 步骤 2 中的提取脚本相同:

async () => {
  for (let i = 0; i < 20; i++) {
    if (document.querySelector('#gs_res_ccl') || document.querySelector('#gs_captcha_ccl')) break;
    await new Promise(r => setTimeout(r, 500));
  }

  if (document.querySelector('#gs_captcha_ccl') || document.body.innerText.includes('unusual traffic')) {
    return { error: 'captcha', message: 'Google Scholar requires CAPTCHA verification. Please complete it in your browser, then tell me to continue.' };
  }

  const items = document.querySelectorAll('#gs_res_ccl .gs_r.gs_or.gs_scl');
  const results = Array.from(items).map((item, i) => {
    const titleEl = item.querySelector('.gs_rt a');
    const meta = item.querySelector('.gs_a')?.textContent || '';
    const parts = meta.split(' - ');
    const authors = parts[0]?.trim() || '';
    const journalYear = parts[1]?.trim() || '';
    const citedByEl = item.querySelector('.gs_fl a[href*="cites"]');

    return {
      n: NEW_START + i + 1,
      title: titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '',
      href: titleEl?.href || '',
      authors,
      journalYear,
      citedBy: citedByEl?.textContent?.match(/\d+/)?.[0] || '0',
      citedByUrl: citedByEl?.href || '',
      dataCid: item.getAttribute('data-cid') || '',
      fullTextUrl: (item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a'))?.href || '',
      snippet: item.querySelector('.gs_rs')?.textContent?.trim()?.substring(0, 200) || ''
    };
  });

  const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || '';
  const hasNext = !!document.querySelector('#gs_n a.gs_ico_nav_next, #gs_nm a:last-child');
  const currentUrl = window.location.href;
  return { total: totalText, page: NEW_PAGE, resultCount: results.length, hasNext, currentUrl, results };
}

将 NEW_START 和 NEW_PAGE 替换为计算出的值。

4. 报告
Page {page} for "{query}" ({total}):

1. {title}
   Authors: {authors} | {journalYear}
   Cited by: {citedBy}
   Data-CID: {dataCid}

2. ...

{hasNext ? "More results available — ask me for the next page." : "No more results."}

备注

  • 此技能使用 2 次工具调用:navigate_page + evaluate_script
  • Google Scholar 默认每页显示 10 条结果
  • start 参数控制分页偏移量

评论

支持 Markdown