evitar la aparición de google recaptcha con selenium python haciendo múltiples investigaciones de Google sin fake_useragent [duplicado]

Actualmente estoy tratando de hacer un script haciendo muchas investigaciones de Google con selenio, luego haciendo clic en el primer resultado de Google para finalmente devolver el url actual.

El hecho es que, después de unas 40 investigaciones, siempre consigo el google reCaptcha, que es un gran problema para mí. No quiero que selenio resuelva un Captcha, por supuesto, pero me encantaría saber una manera que me permite nunca encontrar este captcha, incluso si implica más tiempo de ejecución.

Aquí está mi código:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
import os
import pandas as pd
import numpy as np
from fake_useragent import UserAgent
from selenium.webdriver.chrome.options import Options

path = r"C:\Logiciels\Anaconda3\WebBrowsers\chromedriver.exe"

url = []
# Copy input to output
output_table = input_table.copy()

"""
options = Options()
ua = UserAgent(verify_ssl=False, use_cache_server=False)
userAgent = ua.random
options.add_argument(f'user-agent={userAgent}')
"""

browser = webdriver.Chrome(executable_path=path)
browser.maximize_window()
browser.get('http://www.google.com')
wait = WebDriverWait(browser, 5)
iframe = wait.until(EC.element_to_be_clickable([By.CSS_SELECTOR, '#cnsw > iframe']))
browser.switch_to.frame(iframe)
browser.find_element_by_xpath("//span[contains(@class, 'RveJvd snByac') and contains(text(), 'accepte')]").click()
browser.switch_to.parent_frame()
    
for name, code, city in zip(output_table["Nom etablissement"], output_table["Code postal"], output_table["Commune"]):
    browser.get('http://www.google.com')
    time.sleep(1)
    
    search = browser.find_element_by_name('q')
    req = "{0} {1} {2} site:societe.com".format(name, code, city)
    try:
        search.send_keys(req)
        search.send_keys(Keys.RETURN)
        time.sleep(1)
        
        browser.find_element_by_tag_name("cite").click()
        url.append(browser.current_url)
        time.sleep(1)
    except NoSuchElementException:
        url.append(np.nan)
        time.sleep(1)
    
browser.quit()

output_table["url"] = url

Traté de usar un agente de usuario falso, pero quizá por mi empresa proxy, no podía funcionar.

¿Tiene alguna idea o solución para mí?

Muchas gracias.

Vincent

Pregunta hecha hace 3 años, 4 meses, 27 días - Por htmlhelix


2 Respuestas:

  • Para evitar la aparición del reCaptcha de Google al hacer múltiples búsquedas con Selenium, puedes probar algunas estrategias:

    • Utilizar una VPN: Si crees que el problema podría estar relacionado con el proxy de tu empresa, puedes intentar utilizar una VPN para cambiar tu dirección IP y evitar ser detectado por Google.
    • Limitar la velocidad de búsqueda: Intenta reducir la velocidad a la que Selenium realiza las búsquedas para simular búsquedas más humanas y menos sospechosas. Puedes agregar un pequeño retardo entre cada búsqueda con `time.sleep()`.
    • Evitar patrones predecibles: Intenta hacer las búsquedas de manera menos predecible para Google. Puedes variar los términos de búsqueda, el tiempo entre las búsquedas, e incluso la forma en que se hace clic en los resultados.
    • Usar un User-Agent falso: Aunque mencionas que el uso de fake_useragent no funcionó para ti, podrías intentar otras bibliotecas o métodos para cambiar el User-Agent de tu navegador y evitar ser detectado.
    • Evitar el clic automatizado en los resultados: En lugar de hacer clic automáticamente en el primer resultado, podrías extraer los URLs de los resultados y luego decidir cuál visitar de manera más controlada.

    Recuerda que eludir las medidas de seguridad de Google, como el reCaptcha, puede ir en contra de sus términos y condiciones, por lo que es importante hacer un uso responsable de cualquier técnica que decidas implementar.

    Respondida el Dec 19, 2020 a las 15:51 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Intenta usar un perfil de Chrome personalizado:

    • Crea un perfil de Chrome nuevo en `chrome://settings/profiles`.
    • En el perfil nuevo, inicia sesión en tu cuenta de Google.
    • Utiliza el siguiente código para cargar el perfil personalizado:
    python
    options = Options()
    options.add_argument(f"user-data-dir={chrome_profile_dir}")
    

    Intenta utilizar una extensión del navegador que bloquee los captchas:

    Buster: reCAPTCHA Solver for Humans Recaptcha Auto-Solver

    Intenta utilizar un servicio de proxy rotativo:

    Los servicios de proxy rotativo proporcionan un nuevo proxy para cada solicitud, lo que dificulta que Google te identifique y te muestre el reCAPTCHA. Bright Data Smartproxy

    Otras consideraciones:

    Asegúrate de que tu versión de Selenium esté actualizada. Intenta esperar unos segundos entre cada búsqueda para evitar parecer un bot. Utiliza un motor de búsqueda alternativo como DuckDuckGo, que no utiliza reCAPTCHA. * Utiliza una VPN para enmascarar tu ubicación y dirección IP.

    Respondida el Dec 19, 2020 a las 15:54 - por Gemini

    Votos positivos: 0 | Votos negativos: 0