Comprendere i proxy nell'automazione web
I proxy fungono da agenti clandestini di Internet, mascherando il vostro indirizzo IP e consentendovi di attraversare le frontiere digitali con discrezione. Nel contesto dell'automazione web, dove Selenium e Puppeteer piroettano nel teatro del browser, i proxy sono indispensabili per aggirare limiti di velocità, restrizioni geografiche e sorveglianza. I proxy gratuiti, sebbene capricciosi ed effimeri, possono essere sufficienti per scenari di scraping o test leggeri e non critici.
Tipi di proxy e loro caratteristiche
| Tipo di proxy | Livello di anonimato | Protocolli supportati | Caso d'uso tipico | Affidabilità |
|---|---|---|---|---|
| HTTP | Da basso a medio | HTTP, HTTPS | Semplice web scraping | Basso |
| SOCKS4/5 | Alto | SOCKS4, SOCKS5 | Protocolli complessi, HTTPS | Medio |
| Trasparente | Nessuno (rivela l'IP) | HTTP, HTTPS | Caching, uso interno | Molto basso |
| Elite/Anonimo | Alto | HTTP, HTTPS | Bypassare i blocchi geografici | Medio |
Per un compendio di elenchi di proxy gratuiti, consultare https://free-proxy-list.net/ O https://www.sslproxies.org/.
Utilizzo di proxy gratuiti con Selenium (Python)
1. Installazione delle dipendenze
pip install selenio
Scarica l'ultima versione Driver Chrome compatibile con la tua versione di Chrome.
2. Configurazione di un proxy in Selenium
Il browser, questa marionetta digitale, può essere comandato così:
da selenium import webdriver da selenium.webdriver.chrome.options import Options proxy = "186.121.235.66:8080" # Sostituisci con il tuo proxy gratuito options = Options() options.add_argument(f'--proxy-server=http://{proxy}') driver = webdriver.Chrome(options=options) driver.get('https://httpbin.org/ip') print(driver.page_source) driver.quit()
Tabella: Switch proxy Chrome comuni
| Opzione | Descrizione |
|---|---|
--proxy-server=http://IP:PORT |
Imposta proxy HTTP |
--proxy-server=https=IP:PORT |
Imposta proxy HTTPS |
--proxy-bypass-list=localhost;127.0.0.1 |
Escludi indirizzi dal proxy |
3. Utilizzo di proxy con autenticazione
I proxy gratuiti con autenticazione sono delle gemme rare, ma se dovessi imbatterti in uno di questi:
da selenium import webdriver da selenium.webdriver.chrome.service import Servizio da selenium.webdriver.chrome.options import Opzioni # I proxy autenticati richiedono una soluzione alternativa con l'estensione di Chrome da selenium.webdriver.common.by import By import zipfile proxy_host = 'proxy.example.com' proxy_port = 8000 proxy_user = 'user' proxy_pass = 'pass' manifest_json = """ { "version": "1.0.0", "manifest_version": 2, "name": "Chrome Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", " ", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] } } """ background_js = f""" var config = {{ mode: "fixed_servers", rules: {{ singleProxy: {{ scheme: "http", host: "{proxy_host}", port: parseInt({proxy_port}) }}, bypassList: ["localhost"] }} }}; chrome.proxy.settings.set({{value: config, scope: "regular"}}, function() {{}}); function callbackFn(details) {{ return {{ authCredentials: {{ username: "{proxy_user}", password: "{proxy_pass}" }} }}; }} chrome.webRequest.onAuthRequired.addListener( callbackFn, {{urls: [" "]}}, ['blocking'] ); """ # Crea l'estensione proxy pluginfile = 'proxy_auth_plugin.zip' con zipfile.ZipFile(pluginfile, 'w') come zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) chrome_options = Options() chrome_options.add_extension(pluginfile) driver = webdriver.Chrome(options=chrome_options) driver.get('https://httpbin.org/ip')
Riferimento: Autenticazione proxy Selenium (GitHub Gist)
Utilizzo di proxy gratuiti con Puppeteer (Node.js)
1. Installazione di Puppeteer
npm install puppeteer
2. Avvio di Puppeteer con un proxy
Lascia che il browser indossi la sua nuova maschera:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ args: ['--proxy-server=http://186.121.235.66:8080'] }); const page = await browser.newPage(); await page.goto('https://httpbin.org/ip'); const body = await page.content(); console.log(body); await browser.close(); })();
3. Gestione dell'autenticazione proxy
Quando il guardiano richiede le credenziali:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ args: ['--proxy-server=http://proxy.example.com:8000'] }); const page = await browser.newPage(); await page.authenticate({ username: 'user', password: 'pass' }); await page.goto('https://httpbin.org/ip'); const body = await page.content(); console.log(body); await browser.close(); })();
4. Rotazione dei proxy in Puppeteer
Un balletto di identità effimere, così orchestrato:
const proxies = [ 'http://proxy1:port', 'http://proxy2:port', 'http://proxy3:port' ]; const puppeteer = require('puppeteer'); (async () => { for (const proxy of proxies) { const browser = await puppeteer.launch({ args: [`--proxy-server=${proxy}`] }); const page = await browser.newPage(); await page.goto('https://httpbin.org/ip'); const body = await page.content(); console.log(`Proxy: ${proxy}\n${body}\n`); await browser.close(); } })();
Fonti proxy gratuite
| Nome | Indirizzo URL | Caratteristiche |
|---|---|---|
| Elenco proxy gratuito | https://free-proxy-list.net/ | Ampio elenco HTTP/S, aggiornato |
| Proxy SSL | https://www.sslproxies.org/ | Proxy HTTPS, aggiornamento rapido |
| ProxyScrape | https://proxyscrape.com/free-proxy-list | Protocolli multipli |
| Spia.uno | http://spys.one/en/ | Filtraggio avanzato |
Migliori pratiche e limitazioni
- Natura effimera: I proxy gratuiti spesso scompaiono senza preavviso; monitora la loro vitalità utilizzando strumenti come Controllo proxy.
- Velocità e affidabilità: Aspettatevi latenza, timeout e qualche occasionale vicolo cieco.
- Sicurezza: Non utilizzare mai proxy gratuiti per account sensibili: gli attacchi man-in-the-middle si nascondono nell'ombra.
- Considerazioni legali ed etiche: Rispettare sempre robots.txt e i termini di servizio.
Esempio di convalida proxy (Python)
Prima di richiamare il browser, testa il polso del proxy:
richieste di importazione proxy = "186.121.235.66:8080" proxy = {"http": f"http://{proxy}", "https": f"http://{proxy}"} prova: risposta = requests.get('https://httpbin.org/ip', proxies=proxies, timeout=5) stampa(response.json()) eccetto Eccezione come e: stampa(f"Proxy non riuscito: {e}")
Commenti (0)
Non ci sono ancora commenti qui, potresti essere il primo!