របៀបដំឡើង Proxy ដែលមានការផ្ទៀងផ្ទាត់ក្នុង Puppeteer (Node.js)
Updated:
Puppeteer គ្រប់គ្រង Chrome និង Chromium តាមរយៈ DevTools Protocol (CDP) ដោយផ្តល់នូវ native API await page.authenticate({ username, password }) សម្រាប់ការផ្ទៀងផ្ទាត់ HTTP 407 proxy។ ការផ្គូផ្គង --proxy-server=http://ip:port ជាមួយ page.authenticate() អនុញ្ញាតឱ្យ Node.js scraper របស់អ្នកដំណើរការតាមរយៈ static proxy របស់ VinaProxy ដោយមិនចាំបាច់មាន browser extension ពីខាងក្រៅឡើយ។
--proxy-server=http://ip:port + page.authenticate({ username, password })- 1 IP40,000₫
- 5+ IP35,000₫
- 10+ IP25,000₫
- 20+ IP25,000₫
- 50+ IP25,000₫
- 100+ IP25,000₫
- 200+ IP25,000₫
- 500+ IP25,000₫
- 1000+ IP22,000₫
- 2000+ IP20,000₫
- 1 IP40,000₫
- 5+ IP35,000₫
- 10+ IP25,000₫
- 20+ IP25,000₫
- 50+ IP25,000₫
- 100+ IP25,000₫
- 200+ IP25,000₫
- 500+ IP25,000₫
- 1000+ IP22,000₫
- 2000+ IP20,000₫
ការកំណត់ Proxy ជា 2 ជំហានក្នុង Puppeteer
កុំបង្កប់ user:pass@ នៅក្នុង launch argument --proxy-server ឱ្យសោះ។ ផ្ទុយទៅវិញ សូមបញ្ជូន host និង port នៅពេល launch ហើយផ្ទៀងផ្ទាត់នៅលើ instance របស់ Page៖
| ជំហាន | កូដ Puppeteer | មូលហេតុដែលសំខាន់ |
|---|---|---|
| 1. Launch Chromium | puppeteer.launch({ args: ['--proxy-server=http://ip:port'] }) | ភ្ជាប់ network socket របស់ Chromium ទៅកាន់ proxy របស់ VinaProxy |
| 2. ផ្ទៀងផ្ទាត់ Page | await page.authenticate({ username, password }) | ផ្តល់ព័ត៌មានសម្ងាត់ CDP សម្រាប់ការស្នើសុំ HTTP 407 |
| 3. បើកទៅកាន់ទំព័រ | await page.goto(url, { waitUntil: 'domcontentloaded' }) | ផ្ទុក URL គោលដៅតាមរយៈ tunnel ដែលបានផ្ទៀងផ្ទាត់រួច |
ការបង្វិល Proxy ច្រើនឆ្លងកាត់ Tab ជាមួយ proxy-chain
- សូមចងចាំថា
page.authenticate()មានដែនកំណត់សម្រាប់តែ tabPageនីមួយៗប៉ុណ្ណោះ — សូមហៅវាលើគ្រប់ tab ថ្មីទាំងអស់ដែលបានមកពីbrowser.newPage() - ដើម្បីប្រើ proxy ផ្សេងៗគ្នានៅទូទាំង incognito context ក្នុង process របស់ Chromium តែមួយ សូមរុំព័ទ្ធ URL
http://user:pass@ip:portនីមួយៗជាមួយ npm packageproxy-chain(anonymizeProxy()) ហើយបញ្ជូនproxyServerទៅbrowser.createBrowserContext({ proxyServer }) - អាចប្រើរួមគ្នាបានជាមួយ
puppeteer-extraនិងpuppeteer-extra-plugin-stealth
មួយជំហានម្តងៗ
- 1
បញ្ជូន --proxy-server=http://ip:port ទៅកាន់ puppeteer.launch()
ដំណើរការ browser ជាមួយ
const browser = await puppeteer.launch({ args: ['--proxy-server=http://ip:port'] });។ - 2
ហៅ await page.authenticate() នៅលើទំព័រថ្មី
បើក tab មួយជាមួយ
const page = await browser.newPage();ហើយហៅawait page.authenticate({ username: 'USER', password: 'PASS' });។ - 3
តេស្តមើលអាសយដ្ឋាន IP ចេញក្រៅ
ដំណើរការ
await page.goto('https://vinaproxy.com/api/my-ip');ហើយពិនិត្យមើល JSON ដែលទទួលបានមកវិញ។ - 4
បិទសម្អាត process របស់ browser
ហៅ
await browser.close();នៅពេលដែលការងារបានបញ្ចប់។
សំណួរដែលសួរញឹកញាប់
ហេតុអ្វីបានជា Puppeteer បង្ហាញកំហុស `ERR_NO_SUPPORTED_PROXIES`?
កំហុសនោះកើតឡើងប្រសិនបើអ្នកបញ្ចូល user:pass@ នៅក្នុង --proxy-server=http://user:pass@ip:port។ សូមរក្សាទុកត្រឹម --proxy-server=http://ip:port ឱ្យស្អាត ហើយបញ្ជូនព័ត៌មានសម្ងាត់តាមរយៈ await page.authenticate({ username, password })។
ហេតុអ្វីបានជា tab ទី 2 ដែលបើកជាមួយ `browser.newPage()` ទទួលបរាជ័យដោយមាន HTTP 407?
page.authenticate() ដំណើរការដាច់ដោយឡែកសម្រាប់ tab នីមួយៗ។ សូមហៅ await secondPage.authenticate({ username, password }) មុនពេលបើកចូលតំណភ្ជាប់លើ tab ថ្មីណាមួយ។
តើ proxy របស់ VinaProxy មិនកំណត់ទំហំទិន្នន័យ (unmetered) សម្រាប់ការ scrape លើ headless Chrome ដែរឬទេ?
បាទ/ចាសពិតមែន។ គម្រោង Dedicated IPv4 និង Static ISP ទាំងអស់រួមបញ្ចូល bandwidth ប្រចាំខែដោយមិនកំណត់។
ពង្រឹងប្រព័ន្ធ Node.js Puppeteer របស់អ្នកជាមួយ static IP
Proxy ប្រភេទ Dedicated IPv4 និង Static ISP មិនកំណត់ទិន្នន័យភ្លាមៗនៅទូទាំង 7 ប្រទេស។
ទិញ Puppeteer Proxy