Unpaywall是如何找到论文DOI的10种页面嗅探策略全揭秘【免费下载链接】unpaywall-extensionFirefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extensionUnpaywall 是一款 Firefox/Chrome 浏览器扩展当你打开学术论文页面时它会自动嗅探页面中的论文 DOI并为你找到合法的免费 PDF 全文。这篇文章深入 extension/unpaywall.js 的核心源码完整揭秘它寻找论文 DOI 的10 种页面嗅探策略帮你理解这个免费论文神器背后的工作原理。 Unpaywall 是什么从页面到免费 PDF 的三步流程简单来说Unpaywall 是一个论文开锁器你在浏览器里打开一篇被付费墙挡住的论文它会在页面右侧弹出一个小按钮——绿色、金色或铜色点击就能跳到合法的开放获取Open Access全文。它的工作流程只有三步全部由 extension/unpaywall.js 中的run()主函数驱动延迟启动页面加载后先等 200 毫秒再开始嗅探对 PsycNet 等单页应用SPA站点则等待 3 秒避免页面还没渲染完就抓不到 DOI见 extension/unpaywall.js 的runWithDelay()。嗅探 DOI把整个页面 HTML 抓成字符串按顺序尝试 10 种策略提取 DOI。找不到 DOI 就立即退出不做任何事。双轨搜索拿到 DOI 后一边调用 oadoi 开放获取 API一边嗅探页面里隐藏的 PDF 直链两条线都出结果后注入那个标志性的彩色按钮iframe 逻辑见 extension/unpaywall.js 和 extension/unpaywall.html。扩展通过 extension/manifest.json 配置把unpaywall.js作为内容脚本注入所有网页所以你在任何一个论文页面上它都在默默工作。 核心引擎findDoi() 的 10 种页面嗅探策略所有策略都集中在 extension/unpaywall.js 的findDoi()函数里。它的思路非常朴素按优先级顺序逐个尝试谁先找到合法的 DOI 就立刻收工first-match-wins 链式结构。10 种策略一览#策略嗅探对象适用站点1findDoiFromMetaTagsmeta元标签几乎所有出版商通用2findDoiFromDataDoiAttributesdata-doi属性带 Altmetric 徽章的页面3findDoiFromScienceDirectJS 变量 / DOM 链接ScienceDirect4findDoiFromIeee页面正则IEEE Xplore5findDoiFromNumber页面正则NBER 工作论文6findDoiFromPsycnet链接 href 正则PsycNet (APA)7findDoiFromPubmed锚点标签PubMed8findDoiFromInderScienceOnline特殊 meta 标签InDeSci Online9findDoiFromCairn详情区链接Cairn 法语学术库10findDoiFromEpistemonikos文本为 DOI 的链接Epistemonikos策略 1通用 meta 元标签扫描命中率最高学术文章的身份证通常就藏在页面head的 meta 标签里。findDoiFromMetaTags() 会遍历所有meta标签匹配8 种常见的 DOI 标签名citation_doi、doi、dc.doi、dc.identifier、dc.identifier.doi、bepress_citation_doi、rft_id、dcsext.wt_doi。还有两个精巧的防错细节忽略schemepublisher-id的标签——这类 DOI 里带奇怪的字符替换是脏数据提取的候选值必须以10.开头才算合法 DOI同时会自动剥掉doi:前缀和doi.org/完整链接形式。这一个策略就覆盖了绝大多数出版商页面所以它被排在第 1 位。策略 2data-doi 属性嗅探自带目录页防噪音findDoiFromDataDoiAttributes() 针对带 Altmetric 学术影响力徽章的页面直接抓取所有带data-doi属性的元素。妙处在于目录页防噪如果页面上存在多个不同的data-doi值用Set去重计数说明当前是期刊目录页TOC而不是单篇文章页插件会主动放弃——避免拿错 DOI 去查。策略 3ScienceDirect 专属双版本策略findDoiFromScienceDirect() 专门对付 Elsevier 旗下的 ScienceDirect而且要同时适配新旧两代页面旧版DOI 被塞在 JS 变量SDM.doi里用正则在整页 HTML 上直接提取新版React 架构从classdoi的链接里解析doi.org/后面的部分。这类一个站点两套抓法的模式正是页面嗅探策略最典型的样子。策略 4IEEE Xplore 正则提取findDoiFromIeee() 只在ieeexplore.ieee.org主机上工作用正则doi:([^])从页面的 JSON 化数据中抠出 DOI。策略 5NBER 工作论文编号页findDoiFromNumber() 针对经济学工作论文库 NBER它的页面会明文写出Document Object Identifier (DOI): 10...正则按这个固定文案提取。策略 6PsycNet 心理学数据库findDoiFromPsycnet() 匹配href/doi/10...形式的链接。注意 PsycNet 是 SPA 站点所以它被放进了 3 秒延迟名单extension/unpaywall.js。策略 7PubMed 医学文献库findDoiFromPubmed() 在 PubMed 页面上查找refaid_typedoi的锚点标签直接读取其文本内容。策略 8InDeSci Online 开源出版findDoiFromInderScienceOnline() 读取特殊的pbContextmeta 标签再从其中解析article:article:(10.xxxx)结构。策略 9Cairn 法语学术库findDoiFromCairn() 在div#article-details详情区里遍历所有链接找到指向doi.org/10...的那个。策略 10Epistemonikos 系统综述库findDoiFromEpistemonikos() 最简单直白找页面上文字恰好是DOI的那个链接直接取它的 href。 想自己加一个新站点的嗅探策略只需写一个findDoiFromXxx()函数然后把它追加到 doiFinderFunctions 数组 末尾即可。 找到 DOI 之后双轨搜索与彩色按钮拿到 DOI 只是开始真正的开锁靠两条并行搜索线startSearches()① oadoi 轨道——runOadoi() 带着 DOI 请求 oadoi 开放获取 API返回最佳的 OA 全文位置和OA 颜色期刊在 DOAJ 里金色在机构仓库绿色其他铜色。② pdfLink 轨道——findPdfUrl() 在页面上嗅探隐藏 PDF 直链先看citation_pdf_urlmeta 标签再按出版商逐条匹配Nature、NEJM、Taylor Francis、CDC、ScienceDirect 各有一套专属规则。找到后还要用 downloadPdf() 发起真实请求、只读响应头的Content-Type就中止下载确认它真的是 PDF才算数——不浪费流量也不被付费墙假链接骗到。最后由 getBestOaUrl() 做出裁决页面本地 PDF 优先否则用 oadoi 的结果。按钮颜色由 decideTabColor() 决定按钮颜色含义 绿色找到合法开放获取全文放心点 金色论文所在期刊是金 OA期刊级开放 铜色页面上直接就有免费 PDF 链接⬛ 灰色未找到合法 OA 版本普通用户看到的都是绿即通行在设置里开启 Nerd Mode 后才会显示细分颜色并在浏览器控制台输出嗅探日志见 extension/options.js。 新手上手安装与实用技巧安装在你浏览器的扩展商店搜索 Unpaywall 安装即可无需任何配置。看按钮颜色行动绿色/金色/铜色按钮出现就代表有免费全文可点灰色代表暂时没找到。没反应别慌如果当前页面嗅探不到 DOI非论文页、或页面结构太特殊插件会安静地退出、什么都不做run() 的提前返回。调试彩蛋开启显示 OA 颜色选项后控制台会打印每一步嗅探日志devLog()能直观看到是哪种策略命中了 DOI。了解欢迎页逻辑首次安装后的欢迎页行为由 extension/background.js 控制。❓ 常见问题 FAQ为什么 SPA 站点要等 3 秒PsycNet 这类单页应用DOM 内容是 JS 异步渲染出来的200 毫秒时页面上根本没有 DOI 可抓所以 runWithDelay() 对特定主机名单加长等待。10 种策略的顺序重要吗重要。顺序即优先级通用 meta 标签命中率最高放最前站点专属策略放在后面兜底。找到即停兼顾速度与覆盖。在哪里能看全部嗅探源码extension/unpaywall.js 一个文件就包含全部逻辑扩展入口配置见 extension/manifest.json按钮 UI 见 extension/unpaywall.html 与 extension/inside-frame.js。如何获取完整源码git clone https://gitcode.com/gh_mirrors/un/unpaywall-extension【免费下载链接】unpaywall-extensionFirefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extension创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
pyproj无法识别EPSG:4326?proj.db问题排查与解决全攻略 项目名就叫Python-Proj,光听名字就知道是个用Python折腾地图投影的小项目。可项目第一次跑起来,第一个拦路虎就来了:代码里明明写着CRS.from_epsg(4326),结果终端直接甩给我一句PROJ: proj_exception_create: unrecognized CRS: e… · 2026/9/25 3:26:37
河北知名的火花机服务商实力公司推荐 选火花机别踩坑!4个高频痛点先理清在机械加工、模具制造这类行业里,火花机几乎是刚需设备,但不少企业在选购和使用时都踩过不少坑。
踩坑1:盲目选高配机型
不少老板看参数时只看最高精度最大加工范围,觉得买贵的准没错,… · 2026/9/25 3:26:24
CodeGuide 拼团交易平台:从 MRD 到 PRD 的拼团需求分析全流程解析 文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、… · 2026/9/25 3:56:51
OrangePi 5 Plus 构筑双 EtherCAT 与 6 路 CAN 软实时主站实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:56:51
C++智能指针循环引用:weak_ptr原理与内存泄漏排查实战 排查了大半天的内存泄漏,最后发现根源是两个shared_ptr互相引用——这类循环引用问题,可以说是 C 智能指针领域最经典的坑之一。今天这篇把weak_ptr解决shared_ptr循环引用的来龙去脉完整梳理一遍:底层原理、引用计数到底在数什么、实际改造手… · 2026/9/25 3:56:45
Buildah pull 命令完全指南:镜像拉取的传输协议、认证配置与拉取策略详解 云原生 【免费下载链接】buildah A tool that facilitates building OCI images. 项目地址: https://gitcode.com/gh_mirrors/bu/buildah 点击查看 免费下载 Buildah 是构建 OCI 镜像的实用工具,buildah pull 是其核心命令之一,负责按照指定… · 2026/9/25 3:56:45
RocketMQ大消息处理实战:4MB限制排查与优化方案 1. 4MB限制不是传说:客户端和Broker各卡一道,先搞清楚“谁说了算”上周有个同事跑来找我,说线上给下游推送客户画像消息,突然开始报错,后台一看发送端直接抛了MQClientException: message body size over maxMessageSi… · 2026/9/25 3:56:33
OpenShorts AI布局自动决策的秘密:为什么发12帧比发整个视频更聪明(含成本测算) OpenShorts AI布局自动决策的秘密:为什么发12帧比发整个视频更聪明(含成本测算) 【免费下载链接】openshorts Open source AI clip generator: turns long videos into viral 9:16 shorts with AI moment detection, face tracking, subtitle… · 2026/9/25 3:56:27
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37