[pyar] Web screenshot

Lucas lbellomo en riseup.net
Dom Ene 12 18:11:26 -03 2020


Podes usar Splash[0] para sacar las screenshot. Creo que nació para 
solucionar ese problema (pero ahora hace MUCHAS cosas mas complicadas, 
como devolver el html renderizado).

Deberías tener corriendo Splash (la forma mas sencilla es con docker) y 
después hacer un POST a Splash pasandole el url que queres [1].

Vas a tener varias ventajas contra Selenium como:

- Podes correrlo en varios cpu/maquinas

- Pude renderizar varias paginas en paralelo

- Te va a consumir una cantidad fija de ram

- Mas rápido, porque no tenes el tiempo de arranque del navegador 
(suponiendo que los abrís y cerras en demanda).


[0]: https://splash.readthedocs.io/en/stable/index.html

[1]: 
https://splash.readthedocs.io/en/stable/faq.html#python-using-requests-library

On 1/12/20 1:04 PM, Javier Marcon wrote:
> El 12/1/20 a las 12:35, Augusto escribió:
>> Finalmente lo hice on demand, y funciona bien. El único problema es
>> que una sola caputra me consume 500mb de memoria aprox, estuve
>> monitoreando los procesos con htop al momento de solicitar la captura.
>> Obviamente, al finalizar la captura mato el proceso.
>> El tema es que con 10 usuarios que soliciten una captura al mismo
>> tiempo esto hará que explote la memoria jaja
>> Hay forma de que el proceso sea más ligero? Ya estoy hablando respecto
>> al proceso de selenium en sí. Quizás algunos parámetros que hagan más
>> ligera la captura
>>
>> Respecto a la opción de obtener las capturas previamente, por ahora no
>> la considero ya que al final por ordenes de arriba quieren que sea on
>> demand.
>>
>> Saludos!
>>
> Hola,
>
> Lo que yo sugeriría es por un lado hacer profiling de cada proceso para
> ver que es lo que te consume más memoria y así ver que podes optimizar,
> y por el otro lado hacer que las capturas de pantalla se hagan con un
> proceso diferente y controlado. Para hacer esto yo tendría algunos
> workers (archivos de Python que reciben los pedidos de captura por una
> cola de mensajes como Rabbit MQ por ejemplo, hacen la captura con
> Selenium y devuelven las capturas por otra cola de mensajes) y la
> interacción con el usuario la hace un script que pone los pedidos en la
> cola de pedidos y obtiene las respuestas de la cola de screenshots.
> Podes hacerlo por RPC pero me parece mejor hacerlo asincrónico.
>
> Saludos,
>
> Javier.
>


Más información sobre la lista de distribución pyar