@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.
- package/README.md +7 -74
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,92 +1,25 @@
|
|
|
1
1
|
# `@d-zero/puppeteer-scroll`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`IntersectionObserver` や `loading="lazy"` を完了させるため、ページを上から下までスクロールするユーティリティ。スクロールジャック検出付き。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## インストール
|
|
5
|
+
## Installation
|
|
8
6
|
|
|
9
7
|
```sh
|
|
10
|
-
yarn
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
await scrollAllOver(page, {
|
|
53
|
-
interval: 300,
|
|
54
|
-
distance: 800,
|
|
55
|
-
});
|
|
22
|
+
await scrollAllOver(page, { interval: 300, distance: 800 });
|
|
56
23
|
```
|
|
57
24
|
|
|
58
|
-
|
|
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.
|
|
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": "
|
|
39
|
+
"gitHead": "16c831105a12bb635d49130e7f5add25b6643c40"
|
|
40
40
|
}
|