@d-zero/puppeteer-scroll 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +7 -74
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1,92 +1,25 @@
1
1
  # `@d-zero/puppeteer-scroll`
2
2
 
3
- Puppeteerでスクロールするための関数を提供します。
3
+ `IntersectionObserver` や `loading="lazy"` を完了させるため、ページを上から下までスクロールするユーティリティ。スクロールジャック検出付き。
4
4
 
5
- `IntersectionObserver`や`loading="lazy"`などの機能を使っているサイトに対して表示や読み込みを完了させるために、スクロールを行います。
6
-
7
- ## インストール
5
+ ## Installation
8
6
 
9
7
  ```sh
10
- yarn install @d-zero/puppeteer-scroll
8
+ yarn add @d-zero/puppeteer-scroll
11
9
  ```
12
10
 
13
- ## 使い方
11
+ ## Usage
14
12
 
15
13
  ```ts
16
14
  import { scrollAllOver } from '@d-zero/puppeteer-scroll';
17
15
 
18
- const browser = await puppeteer.launch();
19
- const page = await browser.newPage();
20
- await page.goto('https://example.com');
21
-
22
16
  await scrollAllOver(page);
23
17
  ```
24
18
 
25
- ## API
26
-
27
- ### `scrollAllOver(page, options?)`
28
-
29
- ページを上から下までスクロールします。`body.scrollHeight`に到達するか、スクロールが進行しない状態(スクロールジャック等)が3イテレーション続いた時点で終了します。
30
-
31
- #### オプション
32
-
33
- | オプション | 型 | デフォルト | 説明 |
34
- | ---------- | ------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
35
- | `interval` | `number \| DelayOptions` | `{ random: { min: 200, max: 500 } }` | 各スクロール間のミリ秒。固定値またはランダム範囲(`{ random: ... }`)を指定可能。 |
36
- | `distance` | `number \| DelayOptions` | 未指定時は`clientHeight × random(0.5, 1.0)` | 1ステップで進むピクセル数。固定値またはランダム範囲を指定可能。未指定時はビューポート高さの50〜100%の範囲でステップごとに変動。 |
37
- | `logger` | `(scrollY, scrollHeight, message) => void` | なし | スクロール進捗のログ用コールバック。 |
38
-
39
- `DelayOptions`の型定義は[`@d-zero/shared/delay`](../shared/src/delay.md)を参照。
40
-
41
- #### デフォルト挙動
42
-
43
- オプションを渡さない場合、人間のスクロールに近い揺らぎを付けるため、`interval`と`distance`の両方がランダム化されます:
44
-
45
- - **`interval`**: 200〜500ms の範囲で毎ループ均一分布からサンプリング
46
- - **`distance`**: ビューポート高さの 50〜100% を毎ループブラウザ側`Math.random()`でサンプリング(`clientHeight`に比例するためモバイル・デスクトップを問わず安全)
47
-
48
- 決定論的な挙動が必要な場合(テスト、レコーディング、比較など)は、必ず`interval`と`distance`を明示的に指定してください:
19
+ デフォルトは人間らしい揺らぎを付けたランダム挙動。テスト・レコーディング・VRT など**決定論的な挙動が必要な場合は `interval` と `distance` を明示指定**する:
49
20
 
50
21
  ```ts
51
- // 完全固定(ランダム要素なし)。distance はピクセル値を直接指定する
52
- await scrollAllOver(page, {
53
- interval: 300,
54
- distance: 800,
55
- });
22
+ await scrollAllOver(page, { interval: 300, distance: 800 });
56
23
  ```
57
24
 
58
- > **メモ**: `distance`に`0`以下の値を渡しても内部で最小`1`px に丸められます(スクロールジャック誤検出の防止)。`distance`はピクセル値であり、ビューポート比率では指定できません。
59
-
60
- #### 使用例
61
-
62
- ```ts
63
- import { scrollAllOver } from '@d-zero/puppeteer-scroll';
64
-
65
- // すべてデフォルト(ランダム挙動)
66
- await scrollAllOver(page);
67
-
68
- // interval だけ固定
69
- await scrollAllOver(page, { interval: 300 });
70
-
71
- // interval と distance の両方をランダム化(distance はピクセル値)
72
- await scrollAllOver(page, {
73
- interval: { random: { min: 200, max: 800 } },
74
- distance: { random: { min: 300, max: 900 } },
75
- });
76
-
77
- // 進捗ログ
78
- await scrollAllOver(page, {
79
- logger: (scrollY, scrollHeight, message) => {
80
- console.log(`${message}: ${scrollY}/${scrollHeight}`);
81
- },
82
- });
83
- ```
84
-
85
- ### スクロールジャック検出
86
-
87
- `scrollBy`が呼ばれても`scrollY`が変化しない状態(fullpage.jsなどスクロールジャック系のライブラリが原因)を検出した場合、3イテレーション連続で進行がない時点で自動的に終了します。終了時には`logger`に`'Scroll stuck, bailing out'`が通知されます。
88
-
89
- ## 関連パッケージ
90
-
91
- - [`@d-zero/puppeteer-page-scan`](../puppeteer-page-scan/README.md) — `scrollAllOver`を内包し、`scrollInterval` / `scrollDistance`オプション経由で挙動をカスタマイズ可能
92
- - [`@d-zero/shared/delay`](../shared/src/delay.md) — `DelayOptions`型と確率分布のサポート
25
+ オプション・デフォルト値・スクロールジャック検出ロジック・`distance 0` の丸めについては `src/scroll-all-over.ts` の JSDoc を参照。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d-zero/puppeteer-scroll",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "description": "Scroll function for puppeteer",
5
5
  "author": "D-ZERO",
6
6
  "license": "MIT",
@@ -36,5 +36,5 @@
36
36
  "url": "https://github.com/d-zero-dev/tools.git",
37
37
  "directory": "packages/@d-zero/puppeteer-scroll"
38
38
  },
39
- "gitHead": "2d24e08c0cb516b7ea9d07a4301eb991193cca11"
39
+ "gitHead": "16c831105a12bb635d49130e7f5add25b6643c40"
40
40
  }