Puppeteer를 TOR와 함께 익명으로 사용
인형극
Puppeteer는 Google에서 유지 관리하는 노드 라이브러리로, DevTools 프로토콜을 통해 헤드리스 및 헤드리스가 아닌 Chrome/Chromium을 제어하는 고급 API를 제공합니다. 따라서 Puppeteer는 웹 UI 테스트, E2E 테스트, 웹 크롤링 및 양식 제출, 키보드 입력 또는 페이지 스크린샷과 같은 작업 자동화에 사용할 수 있는 프로그래머와 테스터를 위한 완벽한 도구입니다.
몇 줄의 코드로 Chrome 브라우저를 제어하고 사용자가 수동으로 수행해야 하는 거의 모든 작업을 수행할 수 있습니다. 그러나 큰 힘에는 큰 반대가 따르며 이 밈은 웹 크롤링에도 적용됩니다. 많은 대형 웹사이트 소유자(Amazon, GoDaddy)가 악의적인 크롤러에 대한 대책을 구현했습니다. 조심하지 않고 누군가가 몇 초 만에 전체 웹사이트를 통과한 것과 같은 의심스러운 것을 발견하면 IP가 그들의 도메인에 액세스하지 못하도록 금지될 수 있습니다.
익명을 유지하기 위해 Puppeteer를 사용하는 동안 VPN에 연결할 수 있지만 이 방법을 사용하려면 VPN 서비스 비용을 지불해야 합니다. 익명을 유지하는 다른 방법은 무료이며 TOR라는 익명 네트워크를 사용하는 것입니다.
토르
먼저 SOCKS 포트를 통해 TOR 회로를 설정합니다. TOR 회로는 엔트리/가드 릴레이의 조합이며 주기적으로 IP 주소를 변경하므로 데이터를 전송할 때 아무도 실제 IP 주소를 알 수 없습니다.
[1] Windows에 TOR를 설치하려면 먼저 Windows 소프트웨어용 명령줄 패키지 관리자인 Chocolatey가 필요합니다.
[1.1] PowerShell을 관리자로 열고 실행
Get-ExecutionPolicy
[1.2] 이전 명령이 반환된 경우
Restricted
실행Set-ExecutionPolicy AllSigned
또는 실행Set-ExecutionPolicy Bypass -Scope Process
[1.3] 마지막으로 다음을 통해 Chocolatey를 설치합니다.
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
[1.4] Chocolatey가 설치되어 있는지 확인할 수 있습니다:
choco --version
[2] 이제 Chocolatey를 사용하여 torpackage를 설치할 수 있습니다.
choco install tor
[2.1] tor 패키지를 설치하면 Tor 회로를 설정할 SOCKS 포트를 지정할 수 있습니다. 파일
C:\Users\__YOUR_USERNAME__\AppData\Roaming\tor\torrc
을 열고(파일이 없으면 생성) 다음을 붙여넣습니다.# Open these SOCKS ports, each will provide a new Tor circuit.
SocksPort 9050
SocksPort 9052
SocksPort 9053
SocksPort 9054
참고: 포트 9051은 TOR 컨트롤러의 기본 포트이므로 SOCKS 포트로 사용하면 안 됩니다.
꼭두각시 데모 프로젝트
다음으로 Puppeteer 데모 프로젝트를 만들고 준비된 Tor 회로 중 하나를 사용하도록 구성합니다. 아이디어는 Puppeteer가 Chromium 브라우저를 열고 두 개의 웹사이트를 방문하여 실제로 완전히 익명으로 탐색하는지 확인하는 것입니다.
[1] 이 package.json을 기반으로 npm 프로젝트를 만듭니다.
{
"name": "puppeteer-tor",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"puppeteer": "^15.3.2",
"puppeteer-extra": "^3.3.4",
"puppeteer-extra-plugin-stealth": "^2.11.0"
}
}
2개의 추가 패키지
puppeteer-extra
및 puppeteer-extra-plugin-stealth
의 목적은 사용자 에이전트를 변경하고 사용 중인 시스템 및 브라우저에 대한 정보를 숨기는 것입니다.[2]
npm install
를 통해 패키지를 설치합니다.[3] 파일
index.js
을 만들고 다음을 붙여넣습니다.const puppeteer = require('puppeteer');
const puppeteerExtraPluginStealth = require('puppeteer-extra-plugin-stealth');
const puppeteerExtraPluginUserAgentOverride = require('puppeteer-extra-plugin-stealth/evasions/user-agent-override');
const {PuppeteerExtra} = require('puppeteer-extra');
function preload(device) {
Object.defineProperty(navigator, 'platform', {
value: device.platform,
writable: true,
});
Object.defineProperty(navigator, 'userAgent', {
value: device.userAgent,
writable: true,
});
Object.defineProperty(screen, 'height', {
value: device.viewport.height,
writable: true,
});
Object.defineProperty(screen, 'width', {
value: device.viewport.width,
writable: true,
});
Object.defineProperty(window, 'devicePixelRatio', {
value: device.viewport.deviceScaleFactor,
writable: true,
});
}
const device = {
userAgent: 'Mozilla/5.0 (Macintosh)', // set our fake user-agent
viewport: {
width: 1000,
height: 800,
deviceScaleFactor: 1,
isMobile: false,
hasTouch: false,
isLandscape: true,
},
locale: 'en-US,en;q=0.9',
platform: 'Macintosh', // set our fake platform
};
(async () => {
try {
const pptr = new PuppeteerExtra(puppeteer);
const pluginStealth = puppeteerExtraPluginStealth();
pluginStealth.enabledEvasions.delete('user-agent-override'); // Remove this specific stealth plugin from the default set
pptr.use(pluginStealth);
const pluginUserAgentOverride = puppeteerExtraPluginUserAgentOverride({
userAgent: device.userAgent,
locale: device.locale,
platform: device.platform,
});
pptr.use(pluginUserAgentOverride);
const browser = await pptr.launch({
args: [
'--proxy-server=socks5://127.0.0.1:9050', // Use one of your SOCKS ports
'--disable-features=site-per-process',
`--window-size=${device.viewport.width},${device.viewport.height}`,
],
headless: false,
defaultViewport: device.viewport,
});
const page = await browser.newPage();
await page.evaluateOnNewDocument(preload, device);
await page.goto('https://check.torproject.org'); // Check if we're using Tor
await page.waitForTimeout(6000); // Waits 6 seconds
await page.goto('https://ipleak.net'); // Check IP address, user agent, etc.
} catch (err) {
console.error(err);
}
})();
[4] TOR 패키지 실행 파일
C:\ProgramData\chocolatey\lib\tor\tools\Tor\tor.exe
을 시작하여 TOR 회로 설정[5] 회로가 생성되면 이제 Puppeteer 코드
node index.js
를 시작할 수 있습니다.첫 번째 웹 페이지 방문은 우리가 실제로 TOR를 사용하고 있음을 확인해야 합니다.
다음 웹페이지는 Tor 회로에서 제공한 가짜 URL과 Chromium용으로 구성한 기타 가짜 데이터를 표시해야 합니다.
Github 리포지토리
행복한 테스트!
Reference
이 문제에 관하여(Puppeteer를 TOR와 함께 익명으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/toa_anakin/using-puppeteer-anonymously-with-tor-l9l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)