Así que entré en Bright Data, creé una cuenta y obtuve mi proxy Search Engine Crawler. Aquí está mi función de raspado a continuación:
async function scrape() { try { const preparePageForTests = async (page) => { const userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36';//'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'; await page.setUserAgent(userAgent); await page.evaluateOnNewDocument(() => { Object.defineProperty(navigator, 'webdriver', { get: () => false, }); }); // Pass the Chrome Test. await page.evaluateOnNewDocument(() => { // We can mock this in as much depth as we need for the test. window.navigator.chrome = { app: { isInstalled: false, }, webstore: { onInstallStageChanged: {}, onDownloadProgress: {}, }, runtime: { PlatformOs: { MAC: 'mac', WIN: 'win', ANDROID: 'android', CROS: 'cros', LINUX: 'linux', OPENBSD: 'openbsd', }, PlatformArch: { ARM: 'arm', X86_32: 'x86-32', X86_64: 'x86-64', }, PlatformNaclArch: { ARM: 'arm', X86_32: 'x86-32', X86_64: 'x86-64', }, RequestUpdateCheckStatus: { THROTTLED: 'throttled', NO_UPDATE: 'no_update', UPDATE_AVAILABLE: 'update_available', }, OnInstalledReason: { INSTALL: 'install', UPDATE: 'update', CHROME_UPDATE: 'chrome_update', SHARED_MODULE_UPDATE: 'shared_module_update', }, OnRestartRequiredReason: { APP_UPDATE: 'app_update', OS_UPDATE: 'os_update', PERIODIC: 'periodic', }, } }; }); await page.evaluateOnNewDocument(() => { const originalQuery = window.navigator.permissions.query; return window.navigator.permissions.query = (parameters) => ( parameters.name === 'notifications' ? Promise.resolve({ state: Notification.permission }) : originalQuery(parameters) ); }); await page.evaluateOnNewDocument(() => { // Overwrite the `plugins` property to use a custom getter. Object.defineProperty(navigator, 'plugins', { // This just needs to have `length > 0` for the current test, // but we could mock the plugins too if necessary. get: () => [1, 2, 3, 4, 5], }); }); await page.evaluateOnNewDocument(() => { // Overwrite the `plugins` property to use a custom getter. Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'], }); }); } //the below is the Search Engine Crawler proxy used from the luminati/bright data sign up. This returns ERR_CERT_INVALID or ERR_CERT_AUTHORITY_INVALID const oldProxyUrl = 'http://lum-customer-customerID-zone-zone1:customerPassword@zproxy.lum-superproxy.io:22225' const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl); //if this line is commented out, I get the ERR_NO_SUPPORTED_PROXY const browser = await puppeteerExtra.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', `--proxy-server=${newProxyUrl}` //If I add 'ignoreHTTPSErrors: true' here then I can bypass the CERT errors but then it seems like I can't navigate the browser anymore to a different page. ] }); const page = await browser.newPage(); await preparePageForTests(page); await page.setViewport({ width: 1440, height: 1080 }); await page.goto('https://www.google.com/search?q=concerts+near+new+york'); await page.screenshot({ path: `screenshot.jpeg` }); } catch(err) { console.log(err) } }No estoy seguro de cómo resolver esto. Creo que el error aquí es pasar por alto los errores CERT con ignoreHttpsErrors. Cuando no uso un proxy en absoluto, mi función de análisis (que esencialmente toma la primera lista 'ul' que se ve a continuación) funciona bien, pero si uso el proxy, por alguna razón me está dando los datos en la segunda página. .
¡Cualquier ayuda sería muy apreciada!
El 'ul' está bien formateado y los datos son fáciles de obtener en: https://i.stack.imgur.com/RwiHM.jpg
solo unos pocos elementos 'ul' son visibles y luego obtengo un montón de cosas que no quiero que me devuelvan. Traté de hacer un
page.$eval(".BXE0fe", element => element.click())pero eso no está redirigiendo la página por alguna razón: https://i.stack.imgur.com/3DTay.png
El soporte de Bright Data definitivamente puede ayudarlo con este problema: puede comunicarse con ellos a través de la burbuja de chat en su panel de control o en Skype: luminati.io
Este problema depende del dominio al que se dirija (Bright Data bloquea los dominios de Google, debe usar una zona SERP para Google)
Además del punto que hizo Yevgeniy sobre la orientación a Google (tiene razón, por cierto, para Google necesita usar su producto SERP), si está solicitando a través de HTTPS, debe tener su certificado CA instalado y enviar solicitudes a través del Proxy Manager en lugar de a través de el Superproxy directamente, y nada de esto importaría para Chromium sin cabeza debido a esto .