全自动解答亚马逊Waf验证码,几乎无需任何开发经验

免责声明:

亲爱的追随者们!

我们想分享一篇很有独到见解的文章,详细介绍了在亚马逊平台上解答验证码的有效方法。虽然这篇文章不是我们撰写的,但我们认为与社区分享有价值的信息非常重要。我们希望这篇文章对您有所帮助和启发!

引言---如果您正在制作教学,那么将其执行到底,否则对于初级开发者,如何解决亚马逊验证码上的说明非常难以理解。

这是怎么回事?当我需要解决亚马逊的验证码(臭名昭著的Waf验证码)时,我开始在GSA Ranker和其他一些服务(2captcha)工作时经常使用的服务中查找信息。

我在那里找到了说明,并在上面贴了链接。正如您可能会从引言中理解的那样,我什么都不明白,或者更确切地说,我明白需要使用API,但仅此而已......

有了Selenium就容易多了

主要问题是亚马逊方给出的解答方案超时时间太短。解答验证码的时间有限,如果没有响应,验证码就会刷新(它的两个参数将会更新---iv和上下文)

结果证明验证码刷新超时大约为30秒,在这段时间内,您需要找到页面上的参数并复制粘贴到脚本代码中,然后运行。之后,2captcha应该会求解并返回正确答案。我尝试这样做了几个小时但毫无结果,制定了一套常规动作;但是,唉,搜索和替换不断变化的参数至少需要12-15秒,只剩下15-18秒的时间让该服务解答验证码,这在当前现实中听起来相当不可思议。

在此我们需要一种不同的方法,脚本应该搜索并插入参数,但是一个一生中从未处理过比Ahrefs更复杂的事情的人怎么能编写它呢?这就是为什么我认为像文章中提到的那些教学需要更详细,而不仅仅是"只需使用API,你是笨蛋吗?"

解决办法

找到所有的解答方案后,我花了大约3个小时。让我告诉你一名初级开发者如何完全自动化解答亚马逊验证码。

你需要GPT Chat,就我的情况来说,还需要视频识别亚马逊验证码(你不需要这个,因为我会给你现成的文件)。

我从一名程序员朋友那里得到了这段视频,但他不允许我公开,因为视频没有匿名。 然而,你会不停地唠叨问我要证据,然后我就会因为没有人相信而服用抗抑郁药物,所以我在最后拿到最终脚本时重制了这段视频,并很乐意将其附在本文末尾,以展示我对观众的无尽奉献!

那么,让我们一步一步来。

我拍了视频,做了3张截图,上传到GPT Chat,并让它帮我把这段代码转写成文字。

该视频包含若干文件,但只显示了其中两个文件的内容---index.js和inject.js---就是我开始的地方。 我就不赘述破译截图的细节了(将截图中的代码编译成一个单元有点麻烦,但最终我得到了这两个文件的两段代码:

js 复制代码
// index.js
import { launch } from 'puppeteer'
import { Captcha } from '2captcha-ts'
import { readFileSync } from 'fs'

const solver = new Captcha(process.env.APIKEY)

const target = 'URL of website where you faced CAPTCHA'

const example = async () => {
  const browser = await launch({
    headless: false,
    devtools: true
  })

  const [page] = await browser.pages()

  const preloadFile = readFileSync('./inject.js', 'utf8')
  await page.evaluateOnNewDocument(preloadFile)

  // Here we intercept the console messages to catch the message logged by inject.js script
  page.on('console', async (msg) => {
    const txt = msg.text()
    if (txt.includes('intercepted-params:')) {
      const params = JSON.parse(txt.replace('intercepted-params:', ''))

      const wafParams = {
        pageurl: target,
        sitekey: params.key,
        iv: params.iv,
        context: params.context,
        challenge_script: params.challenge_script,
        captcha_script: params.captcha_script
      }
      console.log(wafParams)

      try {
        console.log('Solving the captcha...')
        const res = await solver.solveRecaptchaV2(wafParams)
        console.log(`Solved the captcha ${res.id}`)
        console.log(res)
        console.log('Using the token...')
        await page.evaluate(token => {
          window.localStorage.inputCaptchaToken(token)
        }, res.data.captcha.voucher)
        console.log(e)
      } catch (e) {
        console.log(e)
      }
    }
  })

  await page.goto(target)
  // Additional code to interact with the page after captcha is solved might be here...
}

example()

第二个文件,inject.js

js 复制代码
console.clear = () => console.log('Console was cleared')

const i = setInterval(() => {
  if (window.CaptchaScript) {
    clearInterval(i)

    let params = gokProps

    Array.from(document.querySelectorAll('script')).forEach(s => {
      const src = s.getAttribute('src')
      if (src && src.includes('captcha.js')) params.captcha_script = src
      if (src && src.includes('challenge.js')) params.challenge_script = src
    })

    console.log('intercepted-params: ' + JSON.stringify(params))
  }
}, 5)

我询问Chat如何让代码工作,建议我使用标准命令。

node index.js

但我已经在这些互联网街道上呆了很长时间,明白如果必要的库没有安装在计算机上,代码就不会工作。在这个问题上我的神经顾问也帮了忙。

检查代码后,我以截图的形式发送给他,他建议安装以下包:

puppeteer 2captcha-ts

因此,安装代码是npm install puppeteer 2captcha-ts(虽然我无法使用VS Code将它们全部一起安装,可能是因为我的手太笨拙了,但我使用控制台挨个安装)。

npm install puppeteer

npm install 2captcha-ts

接下来才是有趣的地方,因为到目前为止,我对所有事情都有所了解,但下一步对我来说是一个真正的谜,我只是按照我的神经顾问告诉我的去做。

因此,为了使代码正确运行,需要使用扩展名为.env的文件。它可以不命名,但应包含以下数据:

APIKEY=your_2captcha_api_key

据了解,我从服务中插入了自己的密钥,而非"your_2captcha_api_key"参数。

关于如何使代码工作还有6条建议,但是......

第一次运行和第一个错误发生了。

该错误与在Node. js中使用语法ES6导入有关。要使用它,您需要在package.json中指定模块类型或将文件扩展名更改为.mjs。

我懒得在package.json中指定模块类型,所以我选择了阻力最小的方法,简单地将文件扩展名从.js更改为.mjs。

下一个错误与导入的package 2captcha-ts包有关,但我并不想详细讨论它。只想说我修改了负责运行该模块的代码几次,添加了日志记录,并检查了连接.env文件的正确性。

尽管如此,它还是不起作用。脚本不断出现错误并顽固地拒绝运行。我比较了截图和Chat从中提取的代码,发现了一处小小的输入错误,这就是问题的根源。

事实证明,即使这样也无济于事---出现了一个错误:.env文件中未定义APIKEY

我们通过添加新的包修复了此问题:

dotenv npm install dotenv

之后,我又遇到了几处输入错误,Chat试图通过改变代码结构来解决,但我只需要仔细比较截图和代码本身。

最终,index.js文件的代码如下所示:

js 复制代码
// index.js
import { launch } from 'puppeteer'
import { Captcha } from '2captcha-ts'
import { readFileSync } from 'fs'

const solver = new Captcha(process.env.APIKEY)

const target = 'URL of website where you faced CAPTCHA'

const example = async () => {
  const browser = await launch({
    headless: false,
    devtools: true
  })

  const [page] = await browser.pages()

  const preloadFile = readFileSync('./inject.js', 'utf8')
  await page.evaluateOnNewDocument(preloadFile)

  // Here we intercept the console messages to catch the message logged by inject.js script
  page.on('console', async (msg) => {
    const txt = msg.text()
    if (txt.includes('intercepted-params:')) {
      const params = JSON.parse(txt.replace('intercepted-params:', ''))

      const wafParams = {
        pageurl: target,
        sitekey: params.key,
        iv: params.iv,
        context: params.context,
        challenge_script: params.challenge_script,
        captcha_script: params.captcha_script
      }
      console.log(wafParams)

      try {
        console.log('Solving the captcha...')
        const res = await solver.solveRecaptchaV2(wafParams)
        console.log(`Solved the captcha ${res.id}`)
        console.log(res)
        console.log('Using the token...')
        await page.evaluate(token => {
          window.localStorage.inputCaptchaToken(token)
        }, res.data.captcha.voucher)
        console.log(e)
      } catch (e) {
        console.log(e)
      }
    }
  })

  await page.goto(target)
  // Additional code to interact with the page after captcha is solved might be here...
}

example()

转换成以下index.mjs

js 复制代码
// index.js
import 'dotenv/config';
import { launch } from 'puppeteer'
import Captcha from '2captcha-ts';
import { readFileSync } from 'fs'

if (!process.env.APIKEY) {
    console.error("APIKEY is not defined in .env file");
    process.exit(1); // Terminate execution if key not found
}

const solver = new Captcha.Solver(process.env.APIKEY);

const target = 'URL of website where you faced CAPTCHA'

const example = async () => {
    const browser = await launch({
        headless: false,
        devtools: true
    })

    const [page] = await browser.pages()

    const preloadFile = readFileSync('./inject.js', 'utf8')
    await page.evaluateOnNewDocument(preloadFile)

    // Here we intercept the console messages to catch the message logged by inject.js script
    page.on('console', async (msg) => {
        const txt = msg.text()
        if (txt.includes('intercepted-params:')) {
            const params = JSON.parse(txt.replace('intercepted-params:', ''))

            const wafParams = {
                pageurl: target,
                sitekey: params.key,
                iv: params.iv,
                context: params.context,
                challenge_script: params.challenge_script,
                captcha_script: params.captcha_script
            }
            console.log(wafParams)

            try {
                console.log('Solving the captcha...')
                const res = await solver.amazonWaf(wafParams)
                console.log(`Solved the captcha ${res.id}`)
                console.log(res)
                console.log('Using the token...')
                await page.evaluate(async (token) => {
                    await ChallengeScript.submitCaptcha(token);
                    window.location.reload ()
                }, res.data.captcha_voucher);
            } catch (e) {
                console.log(e)
            }
        } else {
            return
        }
    })

    await page.goto(target)
    // Additional code to interact with the page after captcha is solved might be here...
}

example()

在上面的代码中,别忘了在需要解决方案的地方替换正确的URL(如果您决定应用它)。

从这个inject.js:

js 复制代码
console.clear = () => console.log('Console was cleared')

const i = setInterval(() => {
  if (window.CaptchaScript) {
    clearInterval(i)

    let params = gokProps

    Array.from(document.querySelectorAll('script')).forEach(s => {
      const src = s.getAttribute('src')
      if (src && src.includes('captcha.js')) params.captcha_script = src
      if (src && src.includes('challenge.js')) params.challenge_script = src
    })

    console.log('intercepted-params: ' + JSON.stringify(params))
  }
}, 5)

到这个inject.js:

js 复制代码
// console.clear = () => console.log('Console was cleared')

let counter = 0;
const MAX_ATTEMPTS = 2000; // Approximately 10 seconds at 5 ms intervals
console.log('Let's start searching for CaptchaScript...');

const i = setInterval(() => {
    console.log(`Attempt ${counter}: Checking for CaptchaScript...`);

    if (window.CaptchaScript || counter > MAX_ATTEMPTS) {
        clearInterval(i);
        if (!window.CaptchaScript) {
            console.log('CaptchaScript not found');
        } else {
            console.log('CaptchaScript found');

            let params = gokuProps;
            Array.from(document.querySelectorAll('script')).forEach(s => {
                const src = s.getAttribute('src');
                if (src && src.includes('captcha.js')) params.captcha_script = src;
                if (src && src.includes('challenge.js')) params.challenge_script = src;
            });

            console.log('intercepted-params: ' + JSON.stringify(params));
        }
    }
    counter++;
}, 5);

终于,脚本运行了。完整地运行。它解答了验证码,并在每次运行时继续解答。

www.bilibili.com/video/BV1RV...

看来未来已经到来了,伙计。但这并不确定。

如何处理这些信息?好吧,该死的,我真的很喜欢这个建议---现在就接受它吧。但是我不想提供建议。用你的方式来,也许有人会发现这对他们的项目有用......

有关验证码识别的更多提示和技巧,请务必查看我们的BiliBili频道,我们将深入研究这一主题。此外,您可以在我们的GitHub资源库中找到更多现成的解决方案。敬请关注更多独到见解内容和更新!

相关推荐
yqcoder36 分钟前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
会发光的猪。1 小时前
css使用弹性盒,让每个子元素平均等分父元素的4/1大小
前端·javascript·vue.js
天下代码客2 小时前
【vue】vue中.sync修饰符如何使用--详细代码对比
前端·javascript·vue.js
Domain-zhuo2 小时前
什么是JavaScript原型链?
开发语言·前端·javascript·jvm·ecmascript·原型模式
小丁爱养花2 小时前
前端三剑客(三):JavaScript
开发语言·前端·javascript
码农六六3 小时前
vue3封装Element Plus table表格组件
javascript·vue.js·elementui
徐同保3 小时前
el-table 多选改成单选
javascript·vue.js·elementui
快乐小土豆~~3 小时前
el-input绑定点击回车事件意外触发页面刷新
javascript·vue.js·elementui
建群新人小猿3 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
djk88884 小时前
Layui Table 行号
前端·javascript·layui