puppeteer-pro 2.3.15 → 2.3.17
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "puppeteer-pro",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.17",
|
|
4
4
|
"description": "A simple puppeteer wrapper to enable useful plugins with ease",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -44,13 +44,13 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/jest": "^30.0.0",
|
|
47
|
-
"@types/node": "^24.
|
|
47
|
+
"@types/node": "^24.9.1",
|
|
48
48
|
"@types/user-agents": "^1.0.4",
|
|
49
49
|
"copyfiles": "^2.4.1",
|
|
50
50
|
"dotenv-safe": "^9.1.0",
|
|
51
|
-
"eslint-config-final": "^1.6.
|
|
51
|
+
"eslint-config-final": "^1.6.19",
|
|
52
52
|
"jest": "^30.2.0",
|
|
53
|
-
"puppeteer": "^24.
|
|
53
|
+
"puppeteer": "^24.26.1",
|
|
54
54
|
"ts-jest": "^29.4.5",
|
|
55
55
|
"ts-node": "^10.9.2",
|
|
56
56
|
"typescript": "^5.9.3"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/solve.recaptchas/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAM5D,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,YAAY,yBAAgC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAEd,gBAAgB,EAAE,MAAM;IAK9B,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM;IAK3C,UAAU,CAAC,IAAI,EAAE,IAAI;IAKrB,cAAc,CAAC,IAAI,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/solve.recaptchas/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAM5D,qBAAa,qBAAsB,SAAQ,MAAM;IAC/C,YAAY,yBAAgC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAEd,gBAAgB,EAAE,MAAM;IAK9B,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM;IAK3C,UAAU,CAAC,IAAI,EAAE,IAAI;IAKrB,cAAc,CAAC,IAAI,EAAE,IAAI;CAsEhC"}
|
|
@@ -46,11 +46,13 @@ class SolveRecaptchasPlugin extends __1.Plugin {
|
|
|
46
46
|
await cursor.click(element);
|
|
47
47
|
}
|
|
48
48
|
let numTriesLeft = 5;
|
|
49
|
-
async
|
|
49
|
+
const isFinished = async () => {
|
|
50
|
+
if (!(await this.hasCaptcha(page)))
|
|
51
|
+
return true;
|
|
50
52
|
if (--numTriesLeft === 0)
|
|
51
53
|
return true;
|
|
52
54
|
return anchorFrame === null || anchorFrame === void 0 ? void 0 : anchorFrame.evaluate(() => !!document.querySelector('.recaptcha-checkbox-checked'));
|
|
53
|
-
}
|
|
55
|
+
};
|
|
54
56
|
await findAndClick(anchorFrame, '#recaptcha-anchor');
|
|
55
57
|
const bframeFrame = page.frames().find(x => x.url().includes('api2/bframe'));
|
|
56
58
|
if (!bframeFrame)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/solve.recaptchas/index.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAC1B,6BAA6B;AAE7B,+CAA4C;AAE5C,6BAAqC;AACrC,0DAA4D;AAE5D,iEAAiE;AACjE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,aAAa,CAAC,GAAG,WAAW,CAAC,CAAC;AACjF,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAElG,MAAa,qBAAsB,SAAQ,UAAM;IAI/C,YAAY,gBAAwB;QAClC,KAAK,EAAE,CAAC;QAJV,iBAAY,GAAG,CAAC,IAAI,sCAAoB,EAAE,CAAC,CAAC;QAK1C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAU,EAAE,OAAgB;QAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAoB,4BAA4B,CAAC;YACzG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAoB,4BAA4B,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAoB,4BAA4B,CAAC;YAClG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAoB,4BAA4B,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAU;QAC7B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QACnC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,MAAM,MAAM,GAAG,IAAA,2BAAY,EAAC,IAAI,CAAC,CAAC;QAElC,KAAK,UAAU,eAAe,CAAC,MAAuB,EAAE,QAAgB;YACtE,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,SAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACvG,CAAC;QAED,KAAK,UAAU,YAAY,CAAC,MAAuB,EAAE,QAAgB;YACnE,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAExC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/solve.recaptchas/index.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from 'axios';\r\nimport * as path from 'path';\r\nimport * as Puppeteer from 'puppeteer';\r\nimport { createCursor } from 'ghost-cursor';\r\n\r\nimport { Page, Plugin } from '../..';\r\nimport { AvoidDetectionPlugin } from './../avoid.detection';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-require-imports\r\nconst injection = require(path.resolve(`${__dirname}/injections`) + '/utils.js');\r\nconst randomBetween = (min: number, max: number) => Math.floor(Math.random() * (max - min)) + min;\r\n\r\nexport class SolveRecaptchasPlugin extends Plugin {\r\n dependencies = [new AvoidDetectionPlugin()];\r\n witAiAccessToken?: string;\r\n\r\n constructor(witAiAccessToken: string) {\r\n super();\r\n this.witAiAccessToken = witAiAccessToken;\r\n }\r\n\r\n async waitForCaptcha(page: Page, timeout?: number) {\r\n return page.waitForFunction(() => !!document.querySelector<HTMLIFrameElement>('iframe[src*=\"api2/anchor\"]') &&\r\n !!document.querySelector<HTMLIFrameElement>('iframe[src*=\"api2/bframe\"]'), { timeout });\r\n }\r\n\r\n async hasCaptcha(page: Page) {\r\n return page.evaluate(() => !!document.querySelector<HTMLIFrameElement>('iframe[src*=\"api2/anchor\"]') &&\r\n !!document.querySelector<HTMLIFrameElement>('iframe[src*=\"api2/bframe\"]'));\r\n }\r\n\r\n async solveRecaptcha(page: Page) {\r\n if (this.isStopped) return;\r\n if (!this.witAiAccessToken) return;\r\n if (!(await this.hasCaptcha(page))) return;\r\n\r\n const anchorFrame = page.frames().find(x => x.url().includes('api2/anchor'));\r\n if (!anchorFrame) return;\r\n\r\n const cursor = createCursor(page);\r\n\r\n async function waitForSelector(iframe: Puppeteer.Frame, selector: string) {\r\n await iframe.waitForFunction((_selector: string) => document.querySelector(_selector), {}, selector);\r\n }\r\n\r\n async function findAndClick(iframe: Puppeteer.Frame, selector: string) {\r\n await waitForSelector(iframe, selector);\r\n\r\n const element = await iframe.$(selector);\r\n if (!element) return;\r\n\r\n await sleep(randomBetween(1 * 1000, 3 * 1000));\r\n await cursor.click(element);\r\n }\r\n\r\n let numTriesLeft = 5;\r\n const isFinished = async () => {\r\n if (!(await this.hasCaptcha(page))) return true;\r\n if (--numTriesLeft === 0) return true;\r\n return anchorFrame?.evaluate(() => !!document.querySelector('.recaptcha-checkbox-checked'));\r\n };\r\n\r\n await findAndClick(anchorFrame, '#recaptcha-anchor');\r\n\r\n const bframeFrame = page.frames().find(x => x.url().includes('api2/bframe'));\r\n if (!bframeFrame) return;\r\n\r\n await findAndClick(bframeFrame, '.rc-button-audio');\r\n\r\n while (!(await isFinished())) {\r\n await waitForSelector(bframeFrame, '.rc-audiochallenge-tdownload-link');\r\n\r\n const audioUrl = await bframeFrame.evaluate(async () => document.querySelector<HTMLLinkElement>('.rc-audiochallenge-tdownload-link')?.href);\r\n if (!audioUrl) return;\r\n\r\n const audioArray = await bframeFrame.evaluate(injection, audioUrl);\r\n if (!audioArray) return;\r\n\r\n const audioBuffer = Buffer.from(new Int8Array(audioArray));\r\n\r\n const response = await axios.post<any>('https://api.wit.ai/speech?v=20220527', audioBuffer, {\r\n headers: {\r\n Authorization: `Bearer ${this.witAiAccessToken}`,\r\n 'Content-Type': 'audio/wav',\r\n },\r\n });\r\n\r\n const data = typeof response.data === 'string' ? JSON.parse(response.data.split('\\r\\n').slice(-1)[0] || '{}') : response.data;\r\n\r\n if (data?.text) {\r\n const responseInput = await bframeFrame.$('#audio-response');\r\n await responseInput?.type(data.text);\r\n\r\n await findAndClick(bframeFrame, '#recaptcha-verify-button');\r\n\r\n await sleep(1000);\r\n } else {\r\n await findAndClick(bframeFrame, '#recaptcha-reload-button');\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction sleep(timeout: number) {\r\n return new Promise(resolve => setTimeout(resolve, timeout));\r\n}\r\n"]}
|