l0o0 / translators_CN

Zotero translator中文网页抓取翻译器🎉This is Zotero translators for Chinese Sites(beta), not the official Zotero repo
GNU Affero General Public License v3.0
4.11k stars 525 forks source link

希望大家帮我测试一下CNKI翻译器 #245

Closed jiaojiaodubai closed 10 months ago

jiaojiaodubai commented 11 months ago

我在我的 LintIt 分支中对CNKI翻译器进行了比较大的重构,解决了一些历史遗留问题。但我不确定它是否能稳定工作,在正式合并到主线供大多数中文用户使用之前,我希望有人能帮我测试一下这个版本的CNKI翻译器,以便我继续改进它。

如何参与测试

  1. 前往LintIt 下载 CNKI.js
  2. (可选步骤)将CNKI.jslastUpdated 的时间调到较远的未来(如2024-12-30)以避免被茉莉花更新覆盖;
  3. 参考帮助文档CNKI.js替换掉。
  4. 如果试用时有任何错误请在这个 issue 下留言并提供测试链接。

如何反馈错误信息

如下图,在Connector中启用调试日志,运行一次抓取任务,然后返回Connector设置界面点击“View Output”刷新调试记录,把里面的日志发送到我的邮箱jiaojiaodubai23@gmail.com注意,先启用logging再抓取,先“view output”再复制记录。 image 如果你是校园网VPN/海外用户,我还需要了解你的网络环境应当以何种方式发送请求,你可以按照这篇小红书笔记 获取额外的调试文件发到我的邮箱 jiaojiaodubai23@gmail.com帮助我继续优化。

更新详情

  1. 简略 target,仅保留主域名部分。因为已经有detectWeb()作进一步判断,这样为支持更多知网版本提供了基础;
  2. scrape() 含三种抓取方案,降低错误率。
  3. showExport 接口的请求格式改为 EndNote(即 Refer),因为知网的返回的 EndNote 格式比 RefWorks格式更接进相关格式标准,这样可以减少对反馈数据的清洗工作。
  4. id 重命名为 ids 以反映内部有多个标识符,ids作为全局变量使用(虽然原来就有变量提升)。
  5. 构造 ids 的任务交到 scrape() 而不是 getSearchResults()。因为对于多条目而言,根据requestDocument() 返回的文档构造 ids 更可靠。
  6. detectWeb() 加入 monitorDOMChanges() 以等待搜索页面加载完成,有望解决#53。
  7. 增加 detectWeb() 对多条目的判断模式和getSearchResults() 筛选条目的方法,以支持期刊页面(#131 #71) 、旧版知网搜索(#79)。@tangxunding @zhengtao-777
  8. 加入新的函数 getIDFromSpaceURL()ids 赋值,以支持知网空间(#72 )。
  9. fixItem() 中增加对预印本的判断以支持网络首发(#145)。
  10. 得益于 #170 中的方法被实现,知网医院专版(#51 #125)、知网外刊(#56)、也一并得到支持。@lucifr @pixiandouban
  11. 被频繁提及的(VPN下)抓取的失败问题,大部分情况下是由于用户向网站发送了过于频繁的请求,导致知网要求通过验证码才能继续访问,针对这种情况,提供了一个用户友好的反馈信息向用户告知这一情况。
  12. 采用新的 attr()text()innerText() 函数,并引进了 tryMatch()label2Text() 以避免对 undefined 调用字符串方法导致的异常。
  13. 不再分割中文姓名。
  14. 通过 ESLint,引号风格以单引号为主。
  15. 更新了测试案例。
  16. 新支持“标准”条目类型。
  17. 新支持“图书”条目类型。2023-12-03
  18. 新增的量导出方案,该方案不依赖单条目页面,在大多数情况下即使遇到验证码也能正常导出。 2023-12-04
  19. 新支持“年鉴”条目类型。
  20. 增加海外版接口,支持CNKI海外版。 2023-12-05
  21. 支持知网地质专版的期刊、学位论文(其它条目可能抓取一部分,但还需要一点点适配)。 2023-12-06
  22. 适配更多字段,修复验证码弹窗不显示。 2023-12-07
yfdyh000 commented 11 months ago

https://github.com/jiaojiaodubai/translators_CN/commit/b8d57d30e332e007cd3ffefb403cd8b2800fb42a Error: No title specified for item

debugItem.title = 'debug'.title

yfdyh000 commented 11 months ago

我没调通,总有getContentsAsyncError: Unsupported type 'undefined' for source报错。 另外,newItem.type = tryMatch(referText, /^%9 (.*)/m);可以吗,很多文章没有%9的样子。

jiaojiaodubai commented 11 months ago

%9是在学位发现的,标注硕士论文或学位论文,原先参考的是这里,现在已经对照Refer/BibIX.js的源码订正了一部分

jiaojiaodubai commented 11 months ago

@yfdyh000 又有了一些更新,现在这样默认空挂着debugItem不保存应该可以避免你提到的错误。

我没调通,总有getContentsAsyncError: Unsupported type 'undefined' for source报错。

yfdyh000 commented 11 months ago

这篇为例,建议用API引文的同时抓取网页上的关键词。

scaffold与网页抓取的表现似乎不太一样,scaffold内抓到了tags、没看到error,但网页抓不到、日志也看不到error。

'Failed to retrieve data from API: GetExport'周边代码有误。requestJSON返回body内容,没有body、.data[2]等成员。

jiaojiaodubai commented 11 months ago

多重捕获之后避免了很多error,所以没有error应该是正常现象。 而表现不一样的原因是:原先从页面抓tag的代码写在scrapeDoc()。脚手架中ShowExport接口抓取错误直接退出到scrapeDoc()抓取,可以抓到tag;而浏览器中ShowExport接口就抓取成功了,因为服务器返回的结果中没有%K标签,所以也就没有tag。现在我把抓tag移入fixItem了。 GetExport的问题已经修复,它的数据在data而不是body,感谢你的宝贵建议👍。 @yfdyh000 未来也许应该直接用"code": 200值来判断返回结果的有效性。

jiaojiaodubai commented 11 months ago

LintIt分支CNKI.js 更新了接口,现在支持CNKI海外版了。#191 #244 #247 @OrlandoZh @Sofiaccch 现在的策略是海外版网站就用海外版的接口,国内版就用国内版的接口。 有个问题是:国内依然可以打开海外版的条目链接,这时应用海外接口肯定会出错的(除非你使用技术手段把IP换到海外),虽然会继续从页面抓取,但效果可能不太理想(特别是英文版的页面里,作者和机构常常混成一串)。所以建议大家再国内就用国内知网,在海外就用海外知网吧,别对着干。

海外知网我已经测试过www.cnki.netoversea.cnkichn.oversea.cnki三个网站,都是可以抓取的,如果还有其它未适配的域名,欢迎告知。

image image

rong-fei commented 11 months ago

拖拽海外知網下載的pdf文件(未更改過檔名)進入zotero,仍無法自動讀取父條目,如下圖:

image

是我這邊的配置問題嗎?

Sofiaccch commented 11 months ago

@jiaojiaodubai 更新后海外仍无法抓取知网。请问我需要做什么吗?

jiaojiaodubai commented 11 months ago

@Sofiaccch ,请确保使用Lintit里的最新版,而不是茉莉花更新的版本或Zotero内置版本。

jiaojiaodubai commented 11 months ago

@rong-fei 首先,茉莉花無法獲取父條目不一定是翻譯器的問題,你需要到茉莉花的倉庫反映問題。其次,我並不瞭解茉莉花匹配檔案的方式,但似乎跟文檔名有關係,有時我的文檔名中含有多餘的括號它就匹配不出來了。

jiaojiaodubai commented 11 months ago

推荐使用以下格式反馈翻译器问题:

你遇到了什么问题? [必填]

发生问题的链接 [必填] 在此填写链接

问题描述 [必填] 如:“作者”字段没有分开。

你的预期结果 如:“作者”名字应该分开。

浏览器

自查清单

附件 如Connector报错记录(建议粘贴代码格式): Connector的报错记录

[JavaScript Error: "No title specified for item
Error: No title specified for item
    at Object._itemDone (chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/translate/translation/translate.js:609:32)
    at Object._itemDone (chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/inject/sandboxManager.js:89:17)
    at Zotero.Item.complete (eval at <anonymous> (chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/inject/sandboxManager.js:63:4), <anonymous>:1:306)
    at scrape (eval at <anonymous> (chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/inject/sandboxManager.js:63:4), <anonymous>:353:12)
    at async doWeb (eval at <anonymous> (chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/inject/sandboxManager.js:63:4), <anonymous>:215:4)" {file: "[object Object]"}]
jiaojiaodubai commented 10 months ago

经反馈,海外知网和图书馆VPN访问已经可用

l0o0 commented 10 months ago

拖拽海外知網下載的pdf文件(未更改過檔名)進入zotero,仍無法自動讀取父條目,如下圖: image 是我這邊的配置問題嗎?

这个是茉莉花插件的问题。你看一下你使用的Zotero和插件版本。目前我使用模板是标题_作者的形式是可以正常抓取的。

l0o0 commented 10 months ago

经反馈,海外知网和图书馆VPN访问已经可用

测试成功的话,可以发个pr,合并起来!

l0o0 commented 10 months ago

@jiaojiaodubai 我看到新增好多 dbcode 与 itemType 的对应关系。 这个是从哪里查询到这些匹配关系

OrlandoZh commented 10 months ago

@jiaojiaodubai @l0o0

遇到问题:

无法下载附件

发生问题的链接 [必填] 在此填写链接 https://kns.cnki.net/kcms2/article/abstract?v=ZJxhFRRmSIh5pmNi5hlqbKr7mwfgoSCZMeRMoApX0h9mosDzEhtWqcXdSnT2211j4wpfuoPi_Jfh5XI7Q79EbFeO-SAwIbUy7kzXpYg4oxzaEbXJsayUMeox31aIlivrM-z9LHNXQuQ6W3OD83ZLVWguTD7Igb97&uniplatform=NZKPT&language=CHS

问题描述 [必填] 120版本后的chrome内核浏览器,谷歌和edge等无法获取文献pdf,个别极端情况所有浏览器均无法获取(知网自带下载能正常下载的情况下) image

预期结果:获取到pdf

浏览器:120版本后的chrome内核浏览器,谷歌和edge 火狐通常能正常获取

自查清单 翻译器: 1.翻译器:11月30日版本和12月10日分支版本均尝试过 我已经按照教程将 2.我尝试过重启浏览器、Zotero或电脑 3.我使用校园网直接访问 4.非海外访问

附件 [JavaScript Error: "Failed to retrieve translators from Zotero Repo Error: HTTP request to https://repo.zotero.org/repo/metadata?version=5.0.114&last=0 rejected with status 0" {file: "chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/zotero.js" line: 306}] image

jiaojiaodubai commented 10 months ago

@jiaojiaodubai 我看到新增好多 dbcode 与 itemType 的对应关系。 这个是从哪里查询到这些匹配关系

@l0o0 我当时在浏览器开发工具的“元素”面板Ctrl + F搜,没想到真让我搜出来了,在搜索结果的页面上方、指定搜索的类型的选项卡元素里😂

jiaojiaodubai commented 10 months ago

@OrlandoZh

无法下载附件

首先,Translator仅仅负责把下载地址提交给浏览器下载 ,下载过程中的任何异常与Translator无关; 其次,对于国内知网而言,附件下载地址也是动态的(和时间有关),这意味着在常久不操作的网页抓取的话,有可能导致翻译器引用了过时的下载链接。

发生问题的链接 [必填] 在此填写链接 https://kns.cnki.net/kcms2/article/abstract?v=ZJxhFRRmSIh5pmNi5hlqbKr7mwfgoSCZMeRMoApX0h9mosDzEhtWqcXdSnT2211j4wpfuoPi_Jfh5XI7Q79EbFeO-SAwIbUy7kzXpYg4oxzaEbXJsayUMeox31aIlivrM-z9LHNXQuQ6W3OD83ZLVWguTD7Igb97&uniplatform=NZKPT&language=CHS 浏览器:120版本后的chrome内核浏览器,谷歌和edge 火狐通常能正常获取

我会着手调查这个问题,如果使用最新版Translator测试时可以重现此问题,那么后续会跟进。

自查清单 11月30日版本和12月10日分支版本均尝试过 我已经按照教程

实际上,正如前面所说,翻译器对附件所做的事情非常有限,所以各版本之间并没有太大的变化,在调查清楚之前,你无需尝试更新的版本。

附件 [JavaScript Error: "Failed to retrieve translators from Zotero Repo Error: HTTP request to https://repo.zotero.org/repo/metadata?version=5.0.114&last=0 rejected with status 0" {file: "chrome-extension://nmhdhpibnnopknkmonacoephklnflpho/zotero.js" line: 306}] image

截图中显示的是你未能通过Connector的官方渠道成功更新Translator,与本问题无关。

jiaojiaodubai commented 10 months ago

我在LintIt更新了多条目抓取时获取附件链接的代码,修复了搜索页面批量抓取偶尔无法下载附件的情况。

l0o0 commented 10 months ago

@jiaojiaodubai 我看到新增好多 dbcode 与 itemType 的对应关系。 这个是从哪里查询到这些匹配关系

@l0o0 我当时在浏览器开发工具的“元素”面板Ctrl + F搜,没想到真让我搜出来了,在搜索结果的页面上方、指定搜索的类型的选项卡元素里😂

干得漂亮👍

jiaojiaodubai commented 10 months ago

代码已经合并到主线,遇到的问题请另发issue。