@things-factory/integration-headless 8.0.0-beta.8 โ†’ 8.0.0

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 (35) hide show
  1. package/dist-server/engine/connector/headless-connector.d.ts +14 -0
  2. package/dist-server/engine/connector/headless-connector.js +54 -0
  3. package/dist-server/engine/connector/headless-connector.js.map +1 -0
  4. package/dist-server/engine/connector/headless-pool.d.ts +3 -0
  5. package/dist-server/engine/connector/headless-pool.js +63 -0
  6. package/dist-server/engine/connector/headless-pool.js.map +1 -0
  7. package/dist-server/engine/connector/index.d.ts +1 -0
  8. package/dist-server/engine/connector/index.js +4 -0
  9. package/dist-server/engine/connector/index.js.map +1 -0
  10. package/dist-server/engine/index.d.ts +1 -0
  11. package/dist-server/engine/index.js +1 -0
  12. package/dist-server/engine/index.js.map +1 -1
  13. package/dist-server/engine/task/pdf-capture-util.d.ts +1 -1
  14. package/dist-server/engine/task/pdf-capture-util.js +3 -3
  15. package/dist-server/engine/task/pdf-capture-util.js.map +1 -1
  16. package/dist-server/tsconfig.tsbuildinfo +1 -1
  17. package/helps/integration/connector/headless-connector.ja.md +31 -183
  18. package/helps/integration/connector/headless-connector.ko.md +32 -177
  19. package/helps/integration/connector/headless-connector.md +31 -178
  20. package/helps/integration/connector/headless-connector.ms.md +32 -180
  21. package/helps/integration/connector/headless-connector.zh.md +31 -178
  22. package/package.json +6 -6
  23. package/server/engine/connector/headless-connector.ts +68 -0
  24. package/server/engine/connector/headless-pool.ts +69 -0
  25. package/server/engine/connector/index.ts +1 -0
  26. package/server/engine/index.ts +2 -0
  27. package/server/engine/task/headless-pdf-capture-board.ts +182 -0
  28. package/server/engine/task/headless-pdf-capture-markdown.ts +47 -0
  29. package/server/engine/task/headless-pdf-capture.ts +39 -0
  30. package/server/engine/task/headless-pdf-open.ts +98 -0
  31. package/server/engine/task/headless-pdf-save.ts +88 -0
  32. package/server/engine/task/index.ts +9 -0
  33. package/server/engine/task/pdf-capture-util.ts +331 -0
  34. package/server/index.ts +3 -0
  35. package/server/tsconfig.json +10 -0
@@ -1,172 +1,57 @@
1
- ### ๐Ÿ† ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใ‚ณใƒใ‚ฏใ‚ฟใƒผ (Headless Connector)
1
+ ### ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ—ใƒผใƒซใ‚ณใƒใ‚ฏใ‚ฟ (Headless Pool Connector)
2
2
 
3
- **ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใ‚ณใƒใ‚ฏใ‚ฟใƒผ**ใฏใ€ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚’ไฝฟ็”จใ—ใฆ **่‡ชๅ‹•ใƒญใ‚ฐใ‚คใƒณ**ใ€**ใ‚ฆใ‚งใƒ–ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐ**ใ€**PDF็”Ÿๆˆ**ใ€**ใƒ•ใ‚ฉใƒผใƒ ้€ไฟก** ใชใฉใฎใ‚ฟใ‚นใ‚ฏใ‚’ๅฎŸ่กŒใ™ใ‚‹ๅผทๅŠ›ใชใƒ„ใƒผใƒซใงใ™ใ€‚
4
- ่ค‡ๆ•ฐใฎใƒ–ใƒฉใ‚ฆใ‚ถใ‚ปใƒƒใ‚ทใƒงใƒณใ‚’็ฎก็†ใ—ใ€ใ‚ปใƒƒใ‚ทใƒงใƒณใฎ็ถญๆŒใ€ใ‚ฏใƒƒใ‚ญใƒผใฎๅ‡ฆ็†ใ€APIใƒ™ใƒผใ‚นใฎใƒญใ‚ฐใ‚คใƒณใชใฉใซๅฏพๅฟœใ—ใฆใ„ใพใ™ใ€‚
3
+ **ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ—ใƒผใƒซใ‚ณใƒใ‚ฏใ‚ฟ**ใฏใ€ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎใƒ—ใƒผใƒซใ‚’็ฎก็†ใ™ใ‚‹ใŸใ‚ใซ่จญ่จˆใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใ“ใฎใ‚ณใƒใ‚ฏใ‚ฟใฏใ€PDFใฎ็”Ÿๆˆใ‚„ใ‚ฆใ‚งใƒ–ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐใฎใ‚ˆใ†ใซใ€่ค‡ๆ•ฐใฎใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚ปใƒƒใ‚ทใƒงใƒณใ‚’ๅŒๆ™‚ใซๅฎŸ่กŒใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ไฝœๆฅญใซไพฟๅˆฉใงใ™ใ€‚ใ“ใฎใ‚ณใƒใ‚ฏใ‚ฟใฏใ€ใ“ใ‚Œใ‚‰ใฎใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎไฝœๆˆใ€ไฝฟ็”จใ€ใŠใ‚ˆใณ็ ดๆฃ„ใ‚’ๅŠน็އ็š„ใซ็ฎก็†ใ—ใพใ™ใ€‚
5
4
 
6
- ---
5
+ #### ใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆ
7
6
 
8
- ## ๐Ÿš€ 1. ใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆ (Endpoint)
7
+ `ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ—ใƒผใƒซใ‚ณใƒใ‚ฏใ‚ฟ`ใฏ็‰นๅฎšใฎใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใ‚’่ฆๆฑ‚ใ—ใพใ›ใ‚“ใŒใ€ๆŽฅ็ถš่จญๅฎšใฎไธ€็’ฐใจใ—ใฆURIใ‚’ๆไพ›ใงใใพใ™ใ€‚ใ“ใฎURIใฏ้€šๅธธใƒ—ใƒฌใƒผใ‚นใƒ›ใƒซใƒ€ใƒผใจใ—ใฆไฝฟ็”จใ•ใ‚Œใ€ใƒ—ใƒผใƒซใŒๅ†…้ƒจ็š„ใซๅฎŸ้š›ใฎๆŽฅ็ถšใ‚’ๅ‡ฆ็†ใ—ใพใ™ใ€‚ใคใพใ‚Šใ€ใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใซใฏไปปๆ„ใฎๆ–‡ๅญ—ๅˆ—ใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
9
8
 
10
- **ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใ‚ณใƒใ‚ฏใ‚ฟใƒผ**ใฎใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใฏใ€**ๅฏพ่ฑกใจใชใ‚‹ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎURL** ใ‚’ๅ…ฅๅŠ›ใ—ใพใ™ใ€‚
11
- ไพ‹ใˆใฐใ€`https://example.com` ใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ใจใ€ใใฎใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ๅ–ๅพ—ใงใใพใ™ใ€‚
12
- ๅ†…้ƒจใ‚ณใƒณใƒ†ใƒณใƒ„ใ‹ใ‚‰PDFใ‚’็”Ÿๆˆใ™ใ‚‹ๅ ดๅˆใฏใ€`localhost` ใ‚‚ไฝฟ็”จใงใใพใ™ใ€‚
9
+ #### ใƒ‘ใƒฉใƒกใƒผใ‚ฟ
13
10
 
14
- ---
11
+ - **min** (ๆ•ฐๅญ—):
12
+ - ใƒ—ใƒผใƒซๅ†…ใง็ถญๆŒใ™ใ‚‹ๆœ€ๅฐใฎใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎๆ•ฐใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
13
+ - ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆๅ€ค: `2`
14
+ - **max** (ๆ•ฐๅญ—):
15
+ - ใƒ—ใƒผใƒซใŒๅ‡ฆ็†ใงใใ‚‹ๆœ€ๅคงใฎใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎๆ•ฐใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
16
+ - ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆๅ€ค: `10`
15
17
 
16
- ## ๐Ÿ”ง 2. ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผ (Parameters)
18
+ ใ“ใ‚Œใ‚‰ใฎใƒ‘ใƒฉใƒกใƒผใ‚ฟใฏใ€ไบˆๆƒณใ•ใ‚Œใ‚‹ไฝœๆฅญ่ฒ ่ทใซๅฟœใ˜ใฆใƒ—ใƒผใƒซใฎใ‚ตใ‚คใ‚บใ‚’่ชฟๆ•ดใงใใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚ไพ‹ใˆใฐใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใŒๅŒๆ™‚ใซ่ค‡ๆ•ฐใฎใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’้ ป็นใซๅฟ…่ฆใจใ™ใ‚‹ๅ ดๅˆใ€`max`ๅ€คใ‚’ๅข—ใ‚„ใ™ใ“ใจใŒใงใใพใ™ใ€‚
17
19
 
18
- ### โœ… ใƒญใ‚ฐใ‚คใƒณ้–ข้€ฃ่จญๅฎš
19
-
20
- | ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผ | ใ‚ฟใ‚คใƒ— | ่ชฌๆ˜Ž | ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆๅ€ค |
21
- | -------------------- | -------- | ----------------------------------------------- | ------------- |
22
- | `username` | `string` | ใƒญใ‚ฐใ‚คใƒณID (ใƒฆใƒผใ‚ถใƒผๅ) | `""` |
23
- | `password` | `string` | ใƒญใ‚ฐใ‚คใƒณ็”จใƒ‘ใ‚นใƒฏใƒผใƒ‰ | `""` |
24
- | `loginPagePath` | `string` | ใƒญใ‚ฐใ‚คใƒณใƒšใƒผใ‚ธใฎใƒ‘ใ‚น (ไพ‹: `/login`) | `"/login"` |
25
- | `loginApiUrl` | `string` | ใƒญใ‚ฐใ‚คใƒณAPIใฎใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆ (ๅฟ…่ฆใชๅ ดๅˆใฎใฟ) | `null` |
26
- | `usernameSelector` | `string` | ใƒฆใƒผใ‚ถใƒผๅๅ…ฅๅŠ›ๆฌ„ใฎCSSใ‚ปใƒฌใ‚ฏใ‚ฟใƒผ | `"#username"` |
27
- | `passwordSelector` | `string` | ใƒ‘ใ‚นใƒฏใƒผใƒ‰ๅ…ฅๅŠ›ๆฌ„ใฎCSSใ‚ปใƒฌใ‚ฏใ‚ฟใƒผ | `"#password"` |
28
- | `submitSelector` | `string` | ใƒญใ‚ฐใ‚คใƒณใƒœใ‚ฟใƒณใฎCSSใ‚ปใƒฌใ‚ฏใ‚ฟใƒผ | `"#submit"` |
29
- | `successSelector` | `string` | ใƒญใ‚ฐใ‚คใƒณๆˆๅŠŸใ‚’็ขบ่ชใ™ใ‚‹ใŸใ‚ใฎ่ฆ็ด ใฎCSSใ‚ปใƒฌใ‚ฏใ‚ฟใƒผ | `null` |
30
- | `shadowDomSelectors` | `string` | Shadow DOM ๅ†…ใฎ่ฆ็ด ใ‚’ๆŒ‡ๅฎš (ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Š) | `""` |
31
- | `timeout` | `number` | ใƒญใ‚ฐใ‚คใƒณใ‚„ใƒšใƒผใ‚ธ่ชญใฟ่พผใฟใฎใ‚ฟใ‚คใƒ ใ‚ขใ‚ฆใƒˆๆ™‚้–“ (ms) | `15000` |
32
- | `retries` | `number` | ใƒญใ‚ฐใ‚คใƒณใฎ่ฉฆ่กŒๅ›žๆ•ฐ | `3` |
33
-
34
- ---
35
-
36
- ## ๐Ÿ” 3. `loginApiUrl` ใฎ่ฉณ็ดฐ่ชฌๆ˜Ž
37
-
38
- ### ๐Ÿ”น `loginApiUrl`ใจใฏ๏ผŸ
39
-
40
- `loginApiUrl` ใฏใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใŒ **APIใƒ™ใƒผใ‚นใฎใƒญใ‚ฐใ‚คใƒณ** ใ‚’ไฝฟ็”จใ™ใ‚‹ๅ ดๅˆใซ่จญๅฎšใ™ใ‚‹ใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใงใ™ใ€‚
41
- ใ‚ตใ‚คใƒˆใซใ‚ˆใฃใฆใฏใ€ใƒญใ‚ฐใ‚คใƒณใƒšใƒผใ‚ธใงใƒ•ใ‚ฉใƒผใƒ ้€ไฟกใ™ใ‚‹ไปฃใ‚ใ‚Šใซใ€ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใฎAPIใ‚’็›ดๆŽฅๅ‘ผใณๅ‡บใ—ใฆใƒญใ‚ฐใ‚คใƒณใ™ใ‚‹ไป•็ต„ใฟใ‚’ๆŒใฃใฆใ„ใพใ™ใ€‚
42
-
43
- ---
44
-
45
- ### โœ… `loginApiUrl` ใ‚’ **่จญๅฎšใ—ใชใ„ๅ ดๅˆ (`null`)**
46
-
47
- ใ“ใฎๅ ดๅˆใ€**HTMLใƒ•ใ‚ฉใƒผใƒ ใ‚’ไฝฟ็”จใ—ใŸใƒญใ‚ฐใ‚คใƒณๆ–นๅผ** ใ‚’ๆŽก็”จใ—ใพใ™ใ€‚
48
- ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใŒ่‡ชๅ‹•็š„ใซใƒฆใƒผใ‚ถใƒผๅใจใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใ€ใƒ•ใ‚ฉใƒผใƒ ใ‚’้€ไฟกใ—ใพใ™ใ€‚
49
-
50
- #### ๐Ÿ“Œ ไพ‹ (HTMLใƒ•ใ‚ฉใƒผใƒ ใƒญใ‚ฐใ‚คใƒณ)
51
-
52
- ```json
53
- {
54
- "endpoint": "https://example.com",
55
- "params": {
56
- "username": "user123",
57
- "password": "securepassword",
58
- "loginPagePath": "/login",
59
- "usernameSelector": "#username",
60
- "passwordSelector": "#password",
61
- "submitSelector": "#submit-button",
62
- "successSelector": ".dashboard"
63
- }
64
- }
65
- ```
66
-
67
- #### ๐Ÿ›  ๅ‹•ไฝœใฎๆตใ‚Œ:
68
-
69
- 1. `https://example.com/login` ใซ็งปๅ‹•
70
- 2. `#username` ใจ `#password` ใซใƒญใ‚ฐใ‚คใƒณๆƒ…ๅ ฑใ‚’ๅ…ฅๅŠ›
71
- 3. `#submit-button` ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใƒ•ใ‚ฉใƒผใƒ ้€ไฟก
72
- 4. `.dashboard` ่ฆ็ด ใฎๆœ‰็„กใงใƒญใ‚ฐใ‚คใƒณๆˆๅŠŸใ‚’ๅˆคๆ–ญ
73
-
74
- ---
75
-
76
- ### โœ… `loginApiUrl` ใ‚’ **่จญๅฎšใ™ใ‚‹ๅ ดๅˆ**
77
-
78
- ใ“ใฎๅ ดๅˆใ€ใ‚ตใ‚คใƒˆใŒ **APIใƒ™ใƒผใ‚นใฎ่ช่จผ** ใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใŸใ‚ใ€`loginApiUrl` ใ‚’ๆ˜Ž็คบ็š„ใซ่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
79
- ไพ‹ใˆใฐใ€ใƒญใ‚ฐใ‚คใƒณAPIใŒ `/api/auth/login` ใฎๅ ดๅˆใ€ใ“ใฎURLใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
80
-
81
- #### ๐Ÿ“Œ ไพ‹ (APIใƒ™ใƒผใ‚นใฎใƒญใ‚ฐใ‚คใƒณ)
82
-
83
- ```json
84
- {
85
- "endpoint": "https://example.com",
86
- "params": {
87
- "username": "user123",
88
- "password": "securepassword",
89
- "loginPagePath": "/login",
90
- "loginApiUrl": "/api/auth/login",
91
- "usernameSelector": "#username",
92
- "passwordSelector": "#password",
93
- "submitSelector": "#submit-button",
94
- "successSelector": ".dashboard"
95
- }
96
- }
97
- ```
98
-
99
- #### ๐Ÿ›  ๅ‹•ไฝœใฎๆตใ‚Œ:
100
-
101
- 1. `https://example.com/api/auth/login` ใซ **POSTใƒชใ‚ฏใ‚จใ‚นใƒˆ** ใ‚’้€ไฟก
102
- 2. ใ‚ตใƒผใƒใƒผใ‹ใ‚‰ใƒฌใ‚นใƒใƒณใ‚นใ‚’ๅ—ใ‘ๅ–ใ‚Šใ€ใ‚ปใƒƒใ‚ทใƒงใƒณใฎใ‚ฏใƒƒใ‚ญใƒผใ‚’ไฟๅญ˜
103
- 3. ใƒกใ‚คใƒณใƒšใƒผใ‚ธใธ็งปๅ‹•ใ—ใ€`.dashboard` ใฎๅญ˜ๅœจใ‚’็ขบ่ช
104
-
105
- ---
106
-
107
- ## ๐Ÿ— 4. ่จญๅฎšไพ‹
20
+ #### ่จญๅฎšไพ‹
108
21
 
109
22
  ```json
110
23
  {
111
- "name": "headless-browser-connector",
24
+ "name": "headless-browser-pool",
112
25
  "connector": "headless-connector",
113
- "endpoint": "https://example.com",
26
+ "endpoint": "1",
114
27
  "params": {
115
- "username": "user123",
116
- "password": "securepassword",
117
- "loginPagePath": "/login",
118
- "loginApiUrl": "/api/auth/login",
119
- "usernameSelector": "#username",
120
- "passwordSelector": "#password",
121
- "submitSelector": "#submit",
122
- "successSelector": ".dashboard",
123
- "timeout": 20000,
124
- "retries": 5
28
+ "min": 5,
29
+ "max": 20
125
30
  }
126
31
  }
127
32
  ```
128
33
 
129
- ---
130
-
131
- ## ๐Ÿ”„ 5. ๆŽฅ็ถšใฎใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซ (Connection Lifecycle)
34
+ ไธŠ่จ˜ใฎไพ‹ใงใฏใ€ใƒ—ใƒผใƒซใฏๅฐ‘ใชใใจใ‚‚5ใคใฎใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็ถญๆŒใ—ใ€ๅฟ…่ฆใซๅฟœใ˜ใฆๆœ€ๅคง20ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใพใงๆ‹กๅผตใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
132
35
 
133
- - **connect**
36
+ #### ๆŽฅ็ถšใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซ
134
37
 
135
- - ่จญๅฎšใซๅพ“ใฃใฆใƒญใ‚ฐใ‚คใƒณใ‚’่ฉฆใฟใพใ™ใ€‚
136
- - ใ‚ปใƒƒใ‚ทใƒงใƒณใ‚’็ถญๆŒใ—ใ€ใ‚ฏใƒƒใ‚ญใƒผใ‚’ไฟๅญ˜ใ—ใฆๅพŒ็ถšใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใงๅ†ๅˆฉ็”จใ—ใพใ™ใ€‚
38
+ - **connect**:
137
39
 
138
- - **disconnect**
139
- - ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใฎใ‚ปใƒƒใ‚ทใƒงใƒณใ‚’็ต‚ไบ†ใ—ใ€ใ‚ฏใƒƒใ‚ญใƒผใ‚’ใ‚ฏใƒชใ‚ขใ—ใพใ™ใ€‚
40
+ - ๆŽฅ็ถšใ‚’ๅˆๆœŸๅŒ–ใ—ใ€่จญๅฎšใ•ใ‚ŒใŸใƒ‘ใƒฉใƒกใƒผใ‚ฟ(`min`ใŠใ‚ˆใณ`max`)ใซๅพ“ใฃใฆใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎใƒ—ใƒผใƒซใ‚’ไฝœๆˆใ—ใพใ™ใ€‚
41
+ - ใƒ—ใƒผใƒซใฏใ“ใ‚Œใ‚‰ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซใ‚’่‡ชๅ‹•็š„ใซ็ฎก็†ใ—ใ€ๅฟ…่ฆใซๅฟœใ˜ใฆๆ–ฐใ—ใ„ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ไฝœๆˆใ—ใ€ๆ—ขๅญ˜ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ๅ†ๅˆฉ็”จใ—ใพใ™ใ€‚
140
42
 
141
- ---
43
+ - **disconnect**:
44
+ - ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใƒ—ใƒผใƒซใ‚’็ ดๆฃ„ใ—ใ€ใ™ในใฆใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใŒ้ฉๅˆ‡ใซ็ต‚ไบ†ใ—ใ€ใƒชใ‚ฝใƒผใ‚นใŒ่งฃๆ”พใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚
142
45
 
143
- ## โšก 6. ๅฏพๅฟœใ™ใ‚‹ใ‚ฟใ‚นใ‚ฏ (Supported Tasks)
46
+ #### ไฝฟ็”จใ‚ทใƒŠใƒชใ‚ช
144
47
 
145
- | ใ‚ฟใ‚นใ‚ฏใ‚ฟใ‚คใƒ— | ่ชฌๆ˜Ž |
146
- | ---------------------- | -------------------------------------- |
147
- | `headless-pdf-capture` | HTMLใ‚’PDFใซๅค‰ๆ›ใ™ใ‚‹ |
148
- | `headless-scrap` | ใ‚ฆใ‚งใƒ–ใƒšใƒผใ‚ธใ‹ใ‚‰็‰นๅฎšใƒ‡ใƒผใ‚ฟใ‚’ๆŠฝๅ‡บใ™ใ‚‹ |
149
- | `headless-post` | ใƒ•ใ‚ฉใƒผใƒ ๅ…ฅๅŠ›ใ‚’่‡ชๅ‹•ๅŒ–ใ—ใ€้€ไฟกใ‚’ๅฎŸ่กŒใ™ใ‚‹ |
48
+ `ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ—ใƒผใƒซใ‚ณใƒใ‚ฏใ‚ฟ`ใฏใ€ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถ็’ฐๅขƒใงไฝœๆฅญใ‚’ๅฎŸ่กŒใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ‚ทใƒŠใƒชใ‚ชใงไธปใซไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚ไพ‹ใˆใฐใ€HTMLใ‚ณใƒณใƒ†ใƒณใƒ„ใ‹ใ‚‰PDFใ‚’็”Ÿๆˆใ—ใŸใ‚Šใ€ใ‚ฆใ‚งใƒ–ใƒšใƒผใ‚ธใฎใ‚นใ‚ฏใƒชใƒผใƒณใ‚ทใƒงใƒƒใƒˆใ‚’ใ‚ญใƒฃใƒ—ใƒใƒฃใ—ใŸใ‚Šใ€ใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใ‹ใ‚‰ใƒ‡ใƒผใ‚ฟใ‚’ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐใ™ใ‚‹้š›ใซไพฟๅˆฉใงใ™ใ€‚
150
49
 
151
- #### ๐Ÿ“Œ ใ‚ฟใ‚นใ‚ฏไพ‹
50
+ #### ใ‚ตใƒใƒผใƒˆใ™ใ‚‹ใ‚ฟใ‚นใ‚ฏ
152
51
 
153
- ### 1๏ธโƒฃ ใ‚ฆใ‚งใƒ–ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐ (`headless-scrap`)
154
-
155
- ```json
156
- {
157
- "name": "scrape-data",
158
- "taskType": "headless-scrap",
159
- "params": {
160
- "path": "/products",
161
- "selectors": [
162
- { "text": "ๅ•†ๅ“ๅ", "value": ".product-title" },
163
- { "text": "ไพกๆ ผ", "value": ".product-price" }
164
- ]
165
- }
166
- }
167
- ```
52
+ `ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ—ใƒผใƒซใ‚ณใƒใ‚ฏใ‚ฟ`ใฏ `headless-pdf` ใƒ—ใƒฌใƒ•ใ‚ฃใƒƒใ‚ฏใ‚นใฎไป˜ใ„ใŸใ‚ฟใ‚นใ‚ฏใ‚’ใ‚ตใƒใƒผใƒˆใ—ใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎใ‚ฟใ‚นใ‚ฏใฏใ€ใ“ใฎใ‚ณใƒใ‚ฏใ‚ฟใŒ็ฎก็†ใ™ใ‚‹ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚
168
53
 
169
- ### 2๏ธโƒฃ PDF็”Ÿๆˆ (`headless-pdf-capture`)
54
+ #### ใ‚ฟใ‚นใ‚ฏใงใฎไฝฟ็”จไพ‹
170
55
 
171
56
  ```json
172
57
  {
@@ -181,43 +66,6 @@
181
66
  }
182
67
  ```
183
68
 
184
- ### 3๏ธโƒฃ ใƒ•ใ‚ฉใƒผใƒ ้€ไฟก (`headless-post`)
185
-
186
- ```json
187
- {
188
- "name": "submit-form",
189
- "taskType": "headless-post",
190
- "params": {
191
- "formPath": "/contact",
192
- "fields": {
193
- "#name": "็”ฐไธญ ๅคช้ƒŽ",
194
- "#email": "tanaka@example.com",
195
- "#message": "ใ“ใ‚“ใซใกใฏใ€ใ“ใ‚Œใฏใƒ†ใ‚นใƒˆใƒกใƒƒใ‚ปใƒผใ‚ธใงใ™๏ผ"
196
- },
197
- "submitSelector": "#submit-button"
198
- }
199
- }
200
- ```
201
-
202
- ---
203
-
204
- ## ๐Ÿ“ข 7. ่ชฌๆ˜Ž (Description)
205
-
206
- **ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใ‚ณใƒใ‚ฏใ‚ฟใƒผ** ใฏ **ใ‚ฆใ‚งใƒ–ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐใ€่‡ชๅ‹•ใƒญใ‚ฐใ‚คใƒณใ€PDF็”Ÿๆˆใ€ใƒ•ใ‚ฉใƒผใƒ ้€ไฟก** ใชใฉใ‚’
207
- ๅŠน็އ็š„ใซๅฎŸ่กŒใ™ใ‚‹ใŸใ‚ใฎๅผทๅŠ›ใชใƒ„ใƒผใƒซใงใ™ใ€‚
208
- **HTMLใƒ™ใƒผใ‚นใฎใƒญใ‚ฐใ‚คใƒณ** ใจ **APIใƒ™ใƒผใ‚นใฎใƒญใ‚ฐใ‚คใƒณ** ใฎไธกๆ–นใซๅฏพๅฟœใ—ใ€ใ•ใพใ–ใพใชใ‚ตใ‚คใƒˆใงใฎ่ช่จผๅ‡ฆ็†ใŒๅฏ่ƒฝใงใ™ใ€‚
209
-
210
- ---
211
-
212
- ### ๐Ÿ“Œ ใพใจใ‚
213
-
214
- | ๆฉŸ่ƒฝ | ่ชฌๆ˜Ž |
215
- | ------------------------ | -------------------------------------- |
216
- | **HTMLใƒ•ใ‚ฉใƒผใƒ ใƒญใ‚ฐใ‚คใƒณ** | ใƒฆใƒผใ‚ถใƒผๆ“ไฝœใ‚’ใ‚ทใƒŸใƒฅใƒฌใƒผใƒˆใ—ใฆใƒญใ‚ฐใ‚คใƒณ |
217
- | **APIใƒญใ‚ฐใ‚คใƒณ** | APIใƒชใ‚ฏใ‚จใ‚นใƒˆใง็›ดๆŽฅใƒญใ‚ฐใ‚คใƒณ (้ซ˜้€Ÿ) |
218
- | **ใ‚ปใƒƒใ‚ทใƒงใƒณ็ฎก็†** | ใ‚ฏใƒƒใ‚ญใƒผใ‚’ไฟๅญ˜ใ—ใ€ใ‚ปใƒƒใ‚ทใƒงใƒณใ‚’็ถญๆŒ |
219
- | **ใ‚ฆใ‚งใƒ–ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐ** | ๆŒ‡ๅฎšใ—ใŸใ‚ณใƒณใƒ†ใƒณใƒ„ใ‚’ๆŠฝๅ‡บใ—ใฆๅ–ๅพ— |
220
- | **PDFๅค‰ๆ›** | HTMLใƒšใƒผใ‚ธใ‚’PDFใซๅค‰ๆ› |
221
- | **ใƒ•ใ‚ฉใƒผใƒ ้€ไฟก** | ่‡ชๅ‹•็š„ใซใƒ•ใ‚ฉใƒผใƒ ๅ…ฅๅŠ›๏ผ†้€ไฟกใ‚’ๅฎŸ่กŒ |
69
+ #### ่ชฌๆ˜Ž
222
70
 
223
- ๐Ÿ“Œ **ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใ‚ณใƒใ‚ฏใ‚ฟใƒผใ‚’ไฝฟใˆใฐใ€ใ•ใพใ–ใพใชใ‚ฆใ‚งใƒ–ใ‚ตใ‚คใƒˆใฎใ‚ฟใ‚นใ‚ฏใ‚’่‡ชๅ‹•ๅŒ–ใงใใพใ™๏ผ** ๐Ÿš€
71
+ **ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ—ใƒผใƒซใ‚ณใƒใ‚ฏใ‚ฟ**ใฏใ€PDF็”Ÿๆˆใ‚„ใ‚ฆใ‚งใƒ–ใ‚นใ‚ฏใƒฌใ‚คใƒ”ใƒณใ‚ฐใชใฉใฎไฝœๆฅญใ‚’ๅŠน็އ็š„ใซๅฎŸ่กŒใ™ใ‚‹ใŸใ‚ใซใ€ใƒ˜ใƒƒใƒ‰ใƒฌใ‚นใƒ–ใƒฉใ‚ฆใ‚ถใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใฎใƒ—ใƒผใƒซใ‚’็ฎก็†ใ—ใ€้ซ˜่ฒ ่ทใชใ‚ทใƒŠใƒชใ‚ชใงใฎใƒชใ‚ฝใƒผใ‚นๅˆฉ็”จใฎๆœ€้ฉๅŒ–ใจๆ‹กๅผตๆ€งใ‚’ไฟ่จผใ—ใพใ™ใ€‚
@@ -1,166 +1,58 @@
1
- ### ๐Ÿ† ํ—ค๋“œ๋ฆฌ์Šค ์ปค๋„ฅํ„ฐ (Headless Connector)
1
+ ### ํ—ค๋“œ๋ฆฌ์Šค ํ’€ ์ปค๋„ฅํ„ฐ (Headless Pool Connector)
2
2
 
3
- **ํ—ค๋“œ๋ฆฌ์Šค ์ปค๋„ฅํ„ฐ**๋Š” ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ™œ์šฉํ•˜์—ฌ **๋กœ๊ทธ์ธ ์ž๋™ํ™”**, **์›น ์Šคํฌ๋ž˜ํ•‘**, **PDF ์ƒ์„ฑ**, **ํผ ์ œ์ถœ** ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ปค๋„ฅํ„ฐ์ž…๋‹ˆ๋‹ค.
4
- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์„ธ์…˜ ์œ ์ง€, ์ฟ ํ‚ค ํ™œ์šฉ, API ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
3
+ **ํ—ค๋“œ๋ฆฌ์Šค ํ’€ ์ปค๋„ฅํ„ฐ**๋Š” ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค์˜ ํ’€(pool)์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ปค๋„ฅํ„ฐ๋Š” PDF ์ƒ์„ฑ์ด๋‚˜ ์›น ์Šคํฌ๋ž˜ํ•‘๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์ด ๋™์‹œ์— ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปค๋„ฅํ„ฐ๋Š” ์ด ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ, ์‚ฌ์šฉ ๋ฐ ํŒŒ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
5
4
 
6
- ---
5
+ #### ์—”๋“œํฌ์ธํŠธ
7
6
 
8
- ## ๐Ÿš€ 1. ์—”๋“œํฌ์ธํŠธ (Endpoint)
7
+ `ํ—ค๋“œ๋ฆฌ์Šค ํ’€ ์ปค๋„ฅํ„ฐ`๋Š” ํŠน์ • ์—”๋“œํฌ์ธํŠธ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์ง€๋งŒ, ์—ฐ๊ฒฐ ์„ค์ •์˜ ์ผํ™˜์œผ๋กœ URI๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด URI๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํ’€์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹ค์ œ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
8
+ ์ฆ‰, ์—”ํŠธํฌ์ธํŠธ๋Š” ์ž„์˜์˜ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
9
9
 
10
- ํ—ค๋“œ๋ฆฌ์Šค ์ปค๋„ฅํ„ฐ์˜ ์—”๋“œํฌ์ธํŠธ๋Š” **์Šคํฌ๋ž˜ํ•‘ ๋Œ€์ƒ ์›น์‚ฌ์ดํŠธ์˜ URL**์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
11
- ์˜ˆ๋ฅผ ๋“ค์–ด, `https://example.com`๊ณผ ๊ฐ™์€ ์›น์‚ฌ์ดํŠธ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋‚ด๋ถ€ ์ปจํ…์ธ ๋กœ PDF ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด `localhost`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
10
+ #### ๋งค๊ฐœ๋ณ€์ˆ˜
12
11
 
13
- ---
12
+ - **min** (์ˆซ์ž):
13
+ - ํ’€์—์„œ ์œ ์ง€ํ•  ์ตœ์†Œ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
14
+ - ๊ธฐ๋ณธ๊ฐ’: `2`
15
+ - **max** (์ˆซ์ž):
16
+ - ํ’€์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
17
+ - ๊ธฐ๋ณธ๊ฐ’: `10`
14
18
 
15
- ## ๐Ÿ”ง 2. ๋งค๊ฐœ๋ณ€์ˆ˜ (Parameters)
19
+ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์€ ์˜ˆ์ƒ๋˜๋Š” ์ž‘์—… ๋ถ€ํ•˜์— ๋งž์ถฐ ํ’€ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค๋ฅผ ์ž์ฃผ ๋™์‹œ์— ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ `max` ๊ฐ’์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
16
20
 
17
- ### โœ… ๋กœ๊ทธ์ธ ๊ด€๋ จ ์„ค์ •
18
-
19
- | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ์„ค๋ช… | ๊ธฐ๋ณธ๊ฐ’ |
20
- | -------------------- | -------- | --------------------------------------------------------------- | ------------- |
21
- | `username` | `string` | ๋กœ๊ทธ์ธํ•  ์‚ฌ์šฉ์ž ์ด๋ฆ„ (์•„์ด๋””) | `""` |
22
- | `password` | `string` | ๋กœ๊ทธ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ | `""` |
23
- | `loginPagePath` | `string` | ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์˜ ๊ฒฝ๋กœ (์˜ˆ: `/login`) | `"/login"` |
24
- | `loginApiUrl` | `string` | ๋กœ๊ทธ์ธ API ์—”๋“œํฌ์ธํŠธ (์—†์œผ๋ฉด `null`) | `null` |
25
- | `usernameSelector` | `string` | ๋กœ๊ทธ์ธ ํผ์˜ ์‚ฌ์šฉ์ž๋ช… ์ž…๋ ฅ ํ•„๋“œ CSS ์„ ํƒ์ž | `"#username"` |
26
- | `passwordSelector` | `string` | ๋กœ๊ทธ์ธ ํผ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ•„๋“œ CSS ์„ ํƒ์ž | `"#password"` |
27
- | `submitSelector` | `string` | ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์˜ CSS ์„ ํƒ์ž | `"#submit"` |
28
- | `successSelector` | `string` | ๋กœ๊ทธ์ธ ์„ฑ๊ณต์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ์˜ CSS ์„ ํƒ์ž | `null` |
29
- | `shadowDomSelectors` | `string` | Shadow DOM ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ์„ ํƒ์ž ๋ชฉ๋ก) | `""` |
30
- | `timeout` | `number` | ๋กœ๊ทธ์ธ ๋ฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๋Œ€๊ธฐ ์‹œ๊ฐ„ (ms) | `15000` |
31
- | `retries` | `number` | ๋กœ๊ทธ์ธ ์‹œ๋„ ํšŸ์ˆ˜ | `3` |
32
-
33
- ---
34
-
35
- ## ๐Ÿ” 3. `loginApiUrl` ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…
36
-
37
- ### ๐Ÿ”น `loginApiUrl`๋ž€?
38
-
39
- `loginApiUrl`์€ ์›น์‚ฌ์ดํŠธ์—์„œ ๊ตฌํ˜„ํ•œ ๋กœ๊ทธ์ธ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋กœ๊ทธ์ธ ์‹œ๋„ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ๊ณ ํ•˜๋Š” ์„ค์ • ์ •๋ณด์ž…๋‹ˆ๋‹ค.
40
-
41
- ### โœ… `loginApiUrl`์ด **์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (`null`)**
42
-
43
- **HTML ํผ์„ ํ†ตํ•œ ๋กœ๊ทธ์ธ ๋ฐฉ์‹**์„ ์‚ฌ์šฉํ•˜๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ๋Š” ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ํŽ˜์ด์ง€๋‚ด์˜ form action์„ ์ง์ ‘ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
44
-
45
- 1. `loginPagePath`์— ์ง€์ •๋œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
46
- 2. ์‚ฌ์šฉ์ž๋ช… ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ•„๋“œ์— ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
47
- 3. ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
48
- 4. `successSelector`๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
49
-
50
- #### ๐Ÿ“Œ ์˜ˆ์ œ ์„ค์ • (HTML ํผ ๋กœ๊ทธ์ธ)
51
-
52
- ```json
53
- {
54
- "endpoint": "https://example.com",
55
- "params": {
56
- "username": "user123",
57
- "password": "securepassword",
58
- "loginPagePath": "/login",
59
- "usernameSelector": "#username",
60
- "passwordSelector": "#password",
61
- "submitSelector": "#submit-button",
62
- "successSelector": ".dashboard"
63
- }
64
- }
65
- ```
66
-
67
- #### ๐Ÿ›  ๋™์ž‘ ๊ณผ์ •
68
-
69
- 1. `https://example.com/login` ํŽ˜์ด์ง€๋กœ ์ด๋™
70
- 2. `#username`, `#password` ์ž…๋ ฅ ํ•„๋“œ์— ๊ฐ’์„ ์ž…๋ ฅ
71
- 3. `#submit-button`์„ ํด๋ฆญํ•˜์—ฌ ๋กœ๊ทธ์ธ ์š”์ฒญ ์ „์†ก
72
- 4. `.dashboard` ์š”์†Œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๋กœ๊ทธ์ธ ์„ฑ๊ณต์œผ๋กœ ํŒ๋‹จ
73
-
74
- ---
75
-
76
- ### โœ… `loginApiUrl`์„ **์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ**
77
-
78
- ์›น์‚ฌ์ดํŠธ๊ฐ€ **API ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ๋ฐฉ์‹**์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ์„ ์œ„ํ•ด์„œ ํ˜ธ์ถœ๋˜๋Š” `loginApiUrl`์„ ์ง์ ‘ ํŒŒ์•…ํ•ด์„œ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
79
- Origin ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ณ„๋„์˜ SSO ์„œ๋ฒ„์˜ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ „์ฒด API URL์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
80
-
81
- #### ๐Ÿ“Œ ์˜ˆ์ œ ์„ค์ • (API ๋กœ๊ทธ์ธ ๋ฐฉ์‹์˜ ์›น์‚ฌ์ดํŠธ)
82
-
83
- ```json
84
- {
85
- "endpoint": "https://example.com",
86
- "params": {
87
- "username": "user123",
88
- "password": "securepassword",
89
- "loginPagePath": "/login",
90
- "loginApiUrl": "/api/auth/login",
91
- "usernameSelector": "#username",
92
- "passwordSelector": "#password",
93
- "submitSelector": "#submit-button",
94
- "successSelector": ".dashboard"
95
- }
96
- }
97
- ```
98
-
99
- ---
100
-
101
- ## ๐Ÿ— 4. ์„ค์ • ์˜ˆ์‹œ
21
+ #### ์„ค์ • ์˜ˆ์‹œ
102
22
 
103
23
  ```json
104
24
  {
105
- "name": "headless-browser-connector",
25
+ "name": "headless-browser-pool",
106
26
  "connector": "headless-connector",
107
- "endpoint": "https://example.com",
27
+ "endpoint": "1",
108
28
  "params": {
109
- "username": "user123",
110
- "password": "securepassword",
111
- "loginPagePath": "/login",
112
- "loginApiUrl": "/api/auth/login",
113
- "usernameSelector": "#username",
114
- "passwordSelector": "#password",
115
- "submitSelector": "#submit",
116
- "successSelector": ".dashboard",
117
- "timeout": 20000,
118
- "retries": 5
29
+ "min": 5,
30
+ "max": 20
119
31
  }
120
32
  }
121
33
  ```
122
34
 
123
- ---
124
-
125
- ## ๐Ÿ”„ 5. ์—ฐ๊ฒฐ ์ƒ๋ช…์ฃผ๊ธฐ (Connection Lifecycle)
126
-
127
- - **connect**
35
+ ์œ„ ์˜ˆ์‹œ์—์„œ ํ’€์€ ์ตœ์†Œ 5๊ฐœ์˜ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์ตœ๋Œ€ 20๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
128
36
 
129
- - ์„ค์ •๋œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
130
- - ์„ธ์…˜์ด ์œ ์ง€๋˜๋ฉฐ, ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜์—ฌ ์ดํ›„ ์š”์ฒญ์—์„œ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
37
+ #### ์—ฐ๊ฒฐ ์ƒ๋ช…์ฃผ๊ธฐ
131
38
 
132
- - **disconnect**
133
- - ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๊ณ  ์ฟ ํ‚ค๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
39
+ - **connect**:
134
40
 
135
- ---
41
+ - ์—ฐ๊ฒฐ์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์„ค์ •๋œ ๋งค๊ฐœ๋ณ€์ˆ˜(`min` ๋ฐ `max`)์— ๋”ฐ๋ผ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค ํ’€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
42
+ - ํ’€์€ ์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
136
43
 
137
- ## โšก 6. ์ง€์›ํ•˜๋Š” ์ž‘์—… (Supported Tasks)
44
+ - **disconnect**:
45
+ - ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ํ’€์„ ํŒŒ๊ธฐํ•˜์—ฌ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ์ ์ ˆํžˆ ์ข…๋ฃŒ๋˜๊ณ  ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด์ œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
138
46
 
139
- | ์ž‘์—… ์œ ํ˜• | ์„ค๋ช… |
140
- | ---------------------- | -------------------------------------------------------- |
141
- | `headless-pdf-capture` | HTML์„ PDF๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—… |
142
- | `headless-scrap` | ์›น ํŽ˜์ด์ง€์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์Šคํฌ๋ž˜ํ•‘ ์ž‘์—… |
143
- | `headless-post` | ์›น์‚ฌ์ดํŠธ์—์„œ ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ  ์ œ์ถœํ•˜๋Š” ์ž‘์—… |
47
+ #### ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค
144
48
 
145
- #### ๐Ÿ“Œ ์ž‘์—… ์˜ˆ์‹œ
49
+ `ํ—ค๋“œ๋ฆฌ์Šค ํ’€ ์ปค๋„ฅํ„ฐ`๋Š” ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, HTML ์ฝ˜ํ…์ธ ๋กœ๋ถ€ํ„ฐ PDF๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์›น ํŽ˜์ด์ง€์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์บก์ฒ˜ํ•˜๊ฑฐ๋‚˜, ์›น์‚ฌ์ดํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํฌ๋ž˜ํ•‘ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
146
50
 
147
- ### 1๏ธโƒฃ ์›น ์Šคํฌ๋ž˜ํ•‘ (`headless-scrap`)
51
+ #### ์ง€์›ํ•˜๋Š” ์ž‘์—…
148
52
 
149
- ```json
150
- {
151
- "name": "scrape-data",
152
- "taskType": "headless-scrap",
153
- "params": {
154
- "path": "/products",
155
- "selectors": [
156
- { "text": "Product Name", "value": ".product-title" },
157
- { "text": "Price", "value": ".product-price" }
158
- ]
159
- }
160
- }
161
- ```
53
+ `ํ—ค๋“œ๋ฆฌ์Šค ํ’€ ์ปค๋„ฅํ„ฐ`๋Š” `headless-pdf` ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์ด ์ปค๋„ฅํ„ฐ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
162
54
 
163
- ### 2๏ธโƒฃ PDF ์ƒ์„ฑ (`headless-pdf-capture`)
55
+ #### ์ž‘์—…์—์„œ์˜ ์˜ˆ์‹œ ์‚ฌ์šฉ
164
56
 
165
57
  ```json
166
58
  {
@@ -175,43 +67,6 @@ Origin ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ณ„๋„์˜ SSO ์„œ๋ฒ„์˜ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”
175
67
  }
176
68
  ```
177
69
 
178
- ### 3๏ธโƒฃ ํผ ์ œ์ถœ (`headless-post`)
179
-
180
- ```json
181
- {
182
- "name": "submit-form",
183
- "taskType": "headless-post",
184
- "params": {
185
- "formPath": "/contact",
186
- "fields": {
187
- "#name": "John Doe",
188
- "#email": "john@example.com",
189
- "#message": "Hello, this is a test message!"
190
- },
191
- "submitSelector": "#submit-button"
192
- }
193
- }
194
- ```
195
-
196
- ---
197
-
198
- ## ๐Ÿ“ข 7. ์„ค๋ช… (Description)
199
-
200
- **ํ—ค๋“œ๋ฆฌ์Šค ์ปค๋„ฅํ„ฐ**๋Š” **์›น ์ž๋™ํ™” ๋ฐ ์Šคํฌ๋ž˜ํ•‘, PDF ์ƒ์„ฑ, ํผ ์ž๋™ ์ž…๋ ฅ ๋ฐ ์ œ์ถœ** ๋“ฑ์„ ์œ„ํ•ด
201
- ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
202
- ํŠนํžˆ **HTML ๋กœ๊ทธ์ธ ๋ฐฉ์‹**๊ณผ **API ๋กœ๊ทธ์ธ ๋ฐฉ์‹**์„ ๋ชจ๋‘ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์›น์‚ฌ์ดํŠธ์—์„œ ์•ˆ์ •์ ์ธ ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
203
-
204
- ---
205
-
206
- ### ๐Ÿ“Œ ์š”์•ฝ
207
-
208
- | ๊ธฐ๋Šฅ | ์„ค๋ช… |
209
- | --------------- | ------------------------------------- |
210
- | **ํผ ๋กœ๊ทธ์ธ** | UI๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜์—ฌ ๋กœ๊ทธ์ธ (HTML ๊ธฐ๋ฐ˜) |
211
- | **API ๋กœ๊ทธ์ธ** | HTTP ์š”์ฒญ์„ ํ†ตํ•ด ์ง์ ‘ ๋กœ๊ทธ์ธ (๋น ๋ฆ„) |
212
- | **์„ธ์…˜ ์œ ์ง€** | ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜์—ฌ ์ง€์†์ ์ธ ์„ธ์…˜ ์œ ์ง€ |
213
- | **์›น ์Šคํฌ๋ž˜ํ•‘** | ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๋ฐ ์ž๋™ํ™” ์ž‘์—… ๊ฐ€๋Šฅ |
214
- | **PDF ๋ณ€ํ™˜** | HTML์„ PDF๋กœ ๋ณ€ํ™˜ |
215
- | **ํผ ์ œ์ถœ** | ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ œ์ถœ |
70
+ #### ์„ค๋ช…
216
71
 
217
- **์ด ์ปค๋„ฅํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์›น์‚ฌ์ดํŠธ์—์„œ ์ž๋™ ๋กœ๊ทธ์ธ ๋ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.** ๐Ÿš€
72
+ **ํ—ค๋“œ๋ฆฌ์Šค ํ’€ ์ปค๋„ฅํ„ฐ**๋Š” PDF ์ƒ์„ฑ ๋ฐ ์›น ์Šคํฌ๋ž˜ํ•‘๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ์ธ์Šคํ„ด์Šค ํ’€์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋†’์€ ์ˆ˜์š”๊ฐ€ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ž์› ํ™œ์šฉ์˜ ์ตœ์ ํ™”์™€ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.