ComicRead

为漫画站增加双页阅读、翻译等优化体验的增强功能。百合会(记录阅读历史、自动签到等)、百合会新站、E-Hentai(关联外站、快捷收藏、标签染色、识别广告页等)、nhentai(彻底屏蔽漫画、无限滚动)、Yurifans(自动签到)、拷贝漫画(copymanga)(显示最后阅读记录、解锁隐藏漫画)、再漫画、漫画柜(manhuagui)、动漫屋(dm5)、mangabz、komiic、無限動漫、绅士漫画(wnacg)、禁漫天堂、NoyAcg、熱辣漫畫、hanime1、hitomi、hdoujin、SchaleNetwork、nude-moon、HentaiZap、IMHentai、HentaiEra、HentaiEnvy、MangaDex、welovemanga、kemono、nekohouse、Pixiv、明日方舟泰拉记事社、最前線、Tachidesk、LANraragi

< ComicReadについてのフィードバック

レート:良 – スクリプトは良好に動作する

§
投稿日: 2025/07/12
編集日: 2025/07/12

ehentai上打开阅读模式会导致ip被判定为滥用,貌似是读的太快了?但调整预读取的图片数量也没用

§
投稿日: 2025/07/12

具体会表现为移动端只能看800x重采样,pc端只能看1280x的重采样,且设置中的图像重采样设置会被强制调整为auto

hymbz作者
§
投稿日: 2025/08/12

回复晚了抱歉。

ehentai 应该没有对速率做太高的限制吧?你说的被判定为滥用是指提示「Your IP address has been temporarily banned」吧,这个一般是使用同一翻墙梯子的人短时间一起消耗了太多配额导致的吧?

§
投稿日: 2025/08/13

https://ehwiki.org/wiki/Technical_Issues
这里面有写
The image size is locked at 1280x even though I have selected a higher resolution in the settings!
You may have triggered the site's anti-bot mechanism. This is likely due to the use of a heavily-abused VPN/proxy node.
Try switching your IP address may resolve this issue.
Donators will not be affected by this limit.

ip的话是自建的,所以只有我一个人用,依然会触发,就如上所述,图片无法切到更高采样,除非换ip或者等几个小时

hymbz作者
§
投稿日: 2025/08/18

不知道 ehentai 的这个反爬机制到底是怎么判断的话,目前脚本的加载流程是这样的:

  1. 首先遍历当前画廊的所有分页取得每页图片的 url(上限10的并发请求)
  2. 然后再根据网址获取图片页的 html 从中取得图片 url(同样是上限10的并发请求)
  3. 最后才是进入阅读模式后开始加载图片(根据设置的预加载数量逐个)

第一项因为分页一般不会太多,所以不太可能是原因。第三项可以通过修改设置来修改。如果真的是脚本的原因的话,那应该是第二项导致的吧。

你把代码13196行 })); 改成 }), undefined, 1); 试看看。

    await helper.plimit([...loadImgs()].map((i, order) => async () => {
      if (i < 0) return;
      context.imgList[i] ||= await getImgUrl(context.pageList[i]);
      setImg(order, {
        src: context.imgList[i],
        name: context.fileNameList[i]
      });
    }));  // <== 这一行
    checkAd?.();
§
投稿日: 2025/09/13

不知道 ehentai 的这个反爬机制到底是怎么判断的话,目前脚本的加载流程是这样的:

  1. 首先遍历当前画廊的所有分页取得每页图片的 url(上限10的并发请求)
  2. 然后再根据网址获取图片页的 html 从中取得图片 url(同样是上限10的并发请求)
  3. 最后才是进入阅读模式后开始加载图片(根据设置的预加载数量逐个)

第一项因为分页一般不会太多,所以不太可能是原因。第三项可以通过修改设置来修改。如果真的是脚本的原因的话,那应该是第二项导致的吧。

你把代码13196行 })); 改成 }), undefined, 1); 试看看。

    await helper.plimit([...loadImgs()].map((i, order) => async () => {
      if (i < 0) return;
      context.imgList[i] ||= await getImgUrl(context.pageList[i]);
      setImg(order, {
        src: context.imgList[i],
        name: context.fileNameList[i]
      });
    }));  // <== 这一行
    checkAd?.();

抱歉佬回复晚了
修改完了代码后,仍然会出现同样的问题,表现为前10页正常高分辨率,后面就被识别为请求过快了,分辨率又会被压到800/1280了,且设置那边无法调整上去高分辨率(单ip持续几个小时)

hymbz作者
§
投稿日: 2025/09/15

没想到改成顺序请求也会触发,看来这个机制还挺严的。具体的判断条件可能是多次请求之间的间隔时间太短,或者是更常见的单位时间内请求次数过多?

具体条件网上搜不到,就只能自己测试看看了。我写了个油猴脚本,可以用来测试具体的限额情况,我因为是多人共用的梯子,基本一直在被限制不太方便测试,只能麻烦你安装下测试看看了,当然我也会趁半夜之类的时间点测看看的。

安装完以后会在 https://e-hentai.org/home.php 的下面增加一个按钮,点击以后就会按照间隔时间不断访问图片页,在检测到图片宽度变成 1280 后就会停止请求并弹窗提示。

通过修改代码里的间隔时间,结合请求次数和总耗时,应该就能判断出来了。我自己测试,即使是间隔一秒请求一次,也会在十次后被限制。

// ==UserScript==
// @name        ehentai 测试超额限制
// @namespace   ehentai 测试超额限制
// @match       https://e-hentai.org/home.php
// @grant       none
// @version     1.0
// ==/UserScript==

/** 间隔时间(单位:秒) */
const INTERVAL = 0.5;
/** 随便一个测试页 */
const URL = 'https://e-hentai.org/s/fd956111aa/3528970-1';

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

document.body.append(document.createElement('hr'));
const button = document.createElement('button');
button.textContent = '开始超额测试';
document.body.append(button);

const p = document.createElement('p');
document.body.append(p);

button.addEventListener('click', async () => {
  const start = Date.now();
  let num = 0;

  while (true) {
    const res = await fetch(URL);
    num++;
    p.textContent = `间隔 ${INTERVAL} 秒,已请求 ${num} 次,耗时 ${(Date.now() - start) / 1000} 秒`;

    const html = await res.text();
    const width = Number(html.match(/var xres = (\d+);/)[1]);
    if(!width) {
      alert('未能获取到图片宽度');
      throw new Error('未能获取到图片宽度');
    }

    console.log(`第 ${num} 次请求,图片宽度为 ${width}`);

    if(width <= 1280) {
      p.textContent += '超额!';
      alert('超额!');
      throw new Error('超额!');
    }

    await sleep(INTERVAL * 1000);
  }
});
hymbz作者
§
投稿日: 2025/09/15

顺便问下你知道触发限制后需要多久才能解封吗?需要顺便测试下解封时间吗?

§
投稿日: 2025/09/20

顺便问下你知道触发限制后需要多久才能解封吗?需要顺便测试下解封时间吗?

测试了一下,即使间隔15s也会被限制,这明显低于了人单张的阅读速度,但还是被限制了
感觉是可能有什么验证请求,或者存在比如真实浏览时候那种点击下一页的操作就可以一直请求高清晰度,一直在抓取图片超过十张就会被限制
另外就是ehentai自带的多页查看器没有这个问题,翻页加载速度大概1s/张也不会触发限制(毕竟是花了hath的哈哈哈),就是这个多页查看器体验不太好,滑起来卡卡的
解除限制的话一般我前一天被限制,第二天就好了,大概是12h左右

hymbz作者
§
投稿日: 2025/09/24

原来你有开多页查看器啊,那你直接进多页查看器后再启用脚本的阅读模式就可以了吧。在多页查看器里脚本会直接调用相应的接口来加载图片,应该就不会触发限制了。顺带一提多页查看器代码里的调用接口间隔是 500ms,但这个接口本身好像并没有额度限制,至少我没测出来,所以脚本就只是稍稍调低了并发数没限制请求间隔(

在 ehentai 上通过点击下一页来翻页时,不会直接请求图片页,而是会通过调用接口来获取图片 url 更新当前网页。稍微测试了下,调用接口应该是不会触发分辨率限制的。但接口会限制单位时间内的请求数,在加载页数多的画廊时就比较麻烦。

不过倒是提醒我了,脚本完全没必要在多页查看器里才调用对应的接口,在画廊页就可以检测用户是否开启了多页查看器,开了的话就可以直接用相关接口来获取图片了,这样不仅可以避免触发分辨率限制,加载速度也会更快。

hymbz作者
§
投稿日: 2025/09/24

对了,有个无关紧要的事想问下你,在 https://e-hentai.org/home.php 顶上 GP 那一栏里,你会一直显示「Due to widespread usage of bulk downloaders, high-resolution images can be limited.」吗?不知道为啥,我这里会一直显示,即使没有被限制,可以在设置里修改到更大的分辨率并正常显示大图,也还是会显示这个提示。

§
投稿日: 2025/09/25

一直是会显示的
Due to widespread usage of bulk downloaders, high-resolution images can be limited.
但下面还有一句这个
You are currently using IP-based limits. No restrictions are currently in effect.
无论是否被限制了分辨率都会显示这些

hymbz作者
§
投稿日: 2025/09/27

脚本更新了下。现在脚本只会在加载图片时才去获取图片 url,这样就可以通过跳转设置里的「预加载页数」来减少请求数。并且现在会首先尝试通过多页查看器和点击翻页的接口来获取图片 url,只有在这两个都失败(短时间请求太多才会出错失败)后,才会通过请求图片页 html 的方式来获取图片 url。

这样应该就可以避免触发分辨率限制了。

§
投稿日: 2025/09/30

脚本更新了下。现在脚本只会在加载图片时才去获取图片 url,这样就可以通过跳转设置里的「预加载页数」来减少请求数。并且现在会首先尝试通过多页查看器和点击翻页的接口来获取图片 url,只有在这两个都失败(短时间请求太多才会出错失败)后,才会通过请求图片页 html 的方式来获取图片 url。

这样应该就可以避免触发分辨率限制了。

确实可以了,赞美大佬!

返信を投稿

返信を投稿するにはログインしてください