Evitando Incapsula con selenio

El cliente contactó con un problema que su recolector no pudo hacer frente con la protección "incapsula".

En pocas palabras, en lugar del código de la página, se devuelve un código javascript, cuando se ejecuta, se realiza una solicitud a las encapsulaciones del servidor, se verifican algunos parámetros del navegador y, si el navegador se reconoce como válido, se devuelven la página y algunas cookies. .





Una descripción detallada se encuentra en el sitio web del desarrollador (www.imperva.com).



Agregar un procesador javascript, así como otras soluciones ofrecidas por Google (por ejemplo, elevar sus servidores), parecía demasiado complicado / largo. Resultó que el selenio evita perfectamente esta protección, pero como hay muchos datos y recopilación en un solo flujo (o incluso cambiar entre pestañas) no quería hacerlo y no había suficientes recursos para iniciar varios navegadores. , se decidió escribir un servidor proxy.



Dado que la carga cambió, dependiendo de la hora del día y otras condiciones, se decidió hacer un web part escalable mediante la combinación de Nginx + uwsgi + frasco. Parecía demasiado costoso ejecutar la versión de Selenium para cada trabajador, por lo que se decidió mover Selenium a un servicio separado, con comunicación entre bloques a través de Redis. Para mantener la implementación lo más simple posible, las solicitudes se ejecutan de forma sincrónica.





Estructura del proyecto







uwsgi.ini – . , .  (



 selenium:

gecko/Sel.py



sellenium . , selenium  , ( ). cookie Redis. Cookie , redis. cookie    callback .





API:





src

, 1 url:





@app.route('/', methods=['GET', 'POST'])
      
      



, url url, , post .





:





http://127.0.0.1:5000/?url=https://www.example.com/vehicledetails/34313441?RowNumber=0& 
      
      



, , , .



request.py .

  requests,   .

Redis, Post, Get c reqests.

, cookie, Selenium .



 , . https, , , . . , .









uwsgi








All Articles