简体   繁体   English

Node.js:如何重启 Tor 客户端

[英]Node.js: how to restart Tor client

I have a simple script that use Puppeteer and Tor client to navigate the web with differents IPs:我有一个简单的脚本,它使用PuppeteerTor客户端来导航具有不同 IP 的 web:

const puppeteer = require('puppeteer-extra');
const puppeteer_stealth = require('puppeteer-extra-plugin-stealth');
const puppeteer_proxy = require('puppeteer-page-proxy')
const exec = require('child_process').exec

puppeteer.use(puppeteer_stealth())

async function test() {
    // This function will test the bot and ooutput the results
    const browser = await puppeteer.launch({
        headless: true,
        args: ['--no-sandbox']
    });
    const page = (await browser.pages())[0];
    console.log('Running test...');
    
    // IP test
    console.log('\nIP test')

    await page.goto('https://api.ipify.org/');
    const original_ip = await page.evaluate(() => { return document.querySelector('body').children[0].innerHTML })
    console.log('Original IP: ' + original_ip)
    
    await puppeteer_proxy(page, 'socks://127.0.0.1:9050');
    await page.reload();
    const tor1_ip = await page.evaluate(() => { return document.querySelector('body').children[0].innerHTML })
    console.log('Tor #1 IP: ' + tor1_ip)

    exec('sudo /etc/init.d/tor restart');
    await page.reload()
    const tor2_ip = await page.evaluate(() => { return document.querySelector('body').children[0].innerHTML })
    console.log('Tor #2 IP: ' + tor1_ip)

    await browser.close()
}

test()

The problem comes when I want to retart Tor client to have a new IP. Normally i'd do this in Linux terminal with the command:当我想重新启动 Tor 客户端以拥有一个新的 IP 时,问题就来了。通常我会在 Linux 终端中使用以下命令执行此操作:

sudo /etc/init.d/tor restart

So i found a way to execute commands in Node.js with child_process , but I can't get it to work.所以我找到了一种在 Node.js 中使用child_process执行命令的方法,但我无法让它工作。 This is the output of my code:这是我的代码的 output:

Running test...

IP test
Original IP: ***.***.***.*** // censored by me
Tor #1 IP: ***.***.***.*** // censored by me
/home/flavio/Documents/arbitrage-betting/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:221
            throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails));
                  ^

Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'innerHTML')
    at __puppeteer_evaluation_script__:1:59
    at ExecutionContext._evaluateInternal (/home/flavio/Documents/arbitrage-betting/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:221:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async ExecutionContext.evaluate (/home/flavio/Documents/arbitrage-betting/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:16)
    at async test (/home/flavio/Documents/arbitrage-betting/index.js:31:21)

I tried to solve the problem by myself, i even implemented tor_request but still couldn't get it to work.我试图自己解决问题,我什至实施了 tor_request但仍然无法正常工作。

I think the Error isnt about restarting its about evaluation of the website?!我认为错误不是关于重新启动它关于网站的评估?!

Edit wow thanks for so many dislikes next time you get no answer with your best designed and if you could read:编辑哇,感谢您下次使用最佳设计没有得到答案时有这么多不喜欢,如果您能阅读:

/home/flavio/Documents/arbitrage-betting/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:221
            throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails));
                  ^

Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'innerHTML')
    at __puppeteer_evaluation_script__:1:59
    at ExecutionContext._evaluateInternal (/home/flavio/Documents/arbitrage-betting/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:221:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async ExecutionContext.evaluate (/home/flavio/Documents/arbitrage-betting/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:16)
    at async test (/home/flavio/Documents/arbitrage-betting/index.js:31:21)

It says it has an error in Evaluation in line 31:21 and i think it should be:它说它在第 31:21 行的评估中有错误,我认为应该是:

const tor2_ip = await page.evaluate(() => { return document.querySelector('body').children[0].innerHTML }) const tor2_ip = await page.evaluate(() => { return document.querySelector('body').children[0].innerHTML })

So... please specify what you looking for or just tell me what is with my answer wrong thanks:)所以...请指定您要查找的内容,或者只是告诉我我的答案有什么错误谢谢:)

When you log 'Tor #2 IP: ' you point to tor1_ip in the below line: console.log('Tor #2 IP: ' + tor1_ip) So it should be: console.log('Tor #2 IP: ' + tor2_ip)当您记录“Tor #2 IP:”时,您在下一行中指向 tor1_ip:console.log('Tor #2 IP:' + tor1_ip) 所以它应该是:console.log('Tor #2 IP:' + tor2_ip)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM