¡Hola!

A través del diseño y desarrollo web, ya sea interactuando con frameworks como Laravel o WordPress, a veces es necesario desarrollar pruebas de unidad, carga o estrés con ciertos aspectos de la interfaz de usuario. Un gran conjunto de herramientas para simular interacciones del mundo real con sitios web de forma automatizada es PhantomJS Webkit . PhantomJS es un kit "sin cabeza" (lo que significa que no se requiere un navegador real) que le permite interactuar con elementos de una página web renderizada.

Esto le permitirá simular llamadas de Ajax, envíos de formularios y esencialmente todo lo que puede esperar que interactúe con una sesión de navegador real. Llevar a PhantomJS un paso más allá es CasperJS . CasperJS es una herramienta de prueba y navegación de navegación sobre PhantomJS y SlimerJS .

Una de las ventajas de utilizar estas herramientas, además de la unidad y otras pruebas destacadas anteriormente, es implementar la capacidad de automatizar acciones en sitios web. Obviamente, hay usos un tanto maliciosos para este tipo de herramientas en este contexto. Sin embargo, hoy voy a destacar cómo purgar adecuadamente sus propios datos personales en Facebook. Esta publicación fue inspirada por el movimiento #DeleteFacebook . No voy a entrar demasiado en el movimiento en sí o por qué comenzó. Supongo que ha llegado aquí y que ya está familiarizado con el motivo por el cual uno consideraría este tipo de medidas.

Me gustaría entrar en por qué un guión como este es necesario primero, antes de entrar en el código mismo con más explicaciones técnicas.

¿POR QUÉ PURGAR SUS DATOS DE FACEBOOK CUANDO PUEDE SIMPLEMENTE ELIMINAR SU CUENTA?

Esta es la primera pregunta que quiero abordar. Para cualquiera que haya trabajado como administrador de sistemas, DevOps o desarrollador para entornos empresariales altamente disponibles, debe saber que la replicación de datos, la redundancia geográfica, las copias de seguridad, las copias de seguridad externas y las políticas de retención de datos son las mejores prácticas estándar que uno esperaría encontrar en estos tipos de escenarios.

Para Facebook, que representa aproximadamente el 40% de todo el tráfico de referencia en Internet, solo puede comenzar a imaginar la replicación, la escala, la redundancia y otras estrategias que se emplean en múltiples centros de datosgeográficamente redundantes que opera Facebook .

Qué significa todo esto?

Esto significa que incluso con suposiciones conservadoras, sus datos nunca desaparecen de manera permanente si desactiva y elimina su cuenta de Facebook. Si tienes la suerte de vivir en la Unión Europea, entonces es probable que tengas mejores oportunidades con el derecho al olvido . En América del Norte, no veo ninguna razón para suponer que sus datos se eliminen de manera permanente cuando elimine su cuenta. Incluso podría ser seguro suponer que esta información se mantiene y se vincula de forma transparente con cualquier cuenta nueva que pueda abrir en el futuro, ya sea conectando números telefónicos asociados con cuentas o mediante análisis estadísticos algorítmicos.

¿CÓMO PURGAS TUS DATOS DE FACEBOOK ANTES DE ELIMINAR TU CUENTA?

Dado que nunca sabremos el alcance de las políticas de retención de datos en las profundidades de las estrategias de ingeniería patentadas de Facebook, podemos adoptar el enfoque paranoico.

Ninguna estrategia descrita aquí ni en ningún otro lado puede pretender ser 100% efectiva, sin embargo, cualquier persona con una buena formación en Administración de Sistemas puede apreciar que el enfoque paranoico es el más seguro.

Teniendo esto en cuenta, lo que queremos hacer es "envenenar" u ofuscar todos nuestros datos, como publicaciones de línea de tiempo, "Me gusta", comentarios y cualquier otra información que hayamos enviado a los sistemas de Facebook. Lo que esto significa es que todas estas métricas que hemos enviado a facebook (voluntariamente) son parte de lo que Facebook usa para generar todos los análisis algorítmicos y temibles que determinan cosas como a quién votamos, orientación sexual y cualquier cantidad de cosas que puede que no haya sido revelado voluntariamente.

Así que retrocedemos en el tiempo y ofuscamos los datos. Todo ello.

Lo que propondría, con el script de CasperJS, es automatizar la edición de todas las actualizaciones de estado en Facebook con datos aleatorios o pseudoaleatorios (es decir, texto "hilado" que es legible pero generado aleatoriamente). Estas actualizaciones de estado tendrían que ser editadas y re-guardadas varias veces en el transcurso de una cantidad de tiempo no divulgada.

Queremos editar cada publicación y reemplazarla con datos aleatorios (por razones de argumento) 5 veces, en el transcurso de 3 meses. Por lo tanto, si tiene 1.000 publicaciones en su línea de tiempo de Facebook, deberá realizar 5.000 ediciones en el transcurso de 90 días. Entonces quisiéramos que los datos "se sientan" en los sistemas de Facebook para garantizar que los datos re-guardados hayan envenenado incluso las copias de seguridad históricas lo mejor que podamos.

Esto suena extremo, pero queremos que nuestros datos reemplazadas y ofuscado para llegar a todos los puntos finales de Facebook con el fin de anonimizar los datos correctamente, en última instancia, tomando de nuevo lo que hicimos nodamos buen grado. Es decir, cualquier cosa que Facebook haya calculado en contra de todas nuestras acciones para determinar quiénes somos como personas, para que puedan publicitarse mejor con nosotros.

AUTOMATICE EL PURGADO DE SUS DATOS DE FACEBOOK CON CASPERJS

En este punto, debo resaltar que todo el código que se muestra o se demuestra aquí, así como el que se aloja en GitHub (el informe se vinculará en la parte inferior de esta publicación), es una prueba de concepto. Este tipo de acciones seguramente violarán los términos del servicio que todos definitivamente leyeron y acordaron voluntariamente. Esto significa que todo lo que se discute aquí solo aboga por estas acciones, scripts y fragmentos de código como prueba de concepto. Usted corre el riesgo de violar los términos del servicio si ejecuta este código contra su propia cuenta de Facebook, así que tenga cuidado.

El script que se ha probado y publicado en github funciona actualmente como un método para editar una sola publicación. Otras iteraciones de la secuencia de comandos recibirán una matriz de números de ID de publicación de Facebook y se repetirán en varias publicaciones como tal. También podría simplemente envolver el script en un script de shell o python que lo envuelva en un bucle for para iterar a través de ID de publicación. Python sería más ideal debido a la capacidad de enhebrar y poner en cola ejecuciones.

A continuación, detallaré cada sección del guión con explicaciones técnicas.

CÓMO USAR EL SCRIPT

Lo que queremos hacer primero es iniciar sesión en su cuenta de Facebook, obviamente. La secuencia de comandos actualmente tiene 4 argumentos de usuario pasados:

-USUARIO

Este es su nombre de usuario utilizado al iniciar sesión en Facebook. Por lo general, sería su dirección de correo electrónico

-PASAR

Esta sería la contraseña para iniciar sesión en Facebook.

-ID DEL MENSAJE

Este es el parámetro de URL "story_fbid" que se aprobó al visualizar una historia. Si ve una sola publicación en Facebook y mira la barra de direcciones, debería verse algo como esto:

En el ejemplo anterior, el mensaje sería "9999"

-IDENTIDAD DE USUARIO

Esto se puede tomar en una versión más inteligente del guión, pero actualmente debe pasarse como un argumento. En el mismo ejemplo de URL arriba, el campo ID de usuario sería "8888".

Entonces, un ejemplo completo de la secuencia de comandos se vería así:

 

CÓMO INICIAR SESIÓN EN FACEBOOK CON CASPERJS

Iniciar sesión en Facebook con CasperJS es bastante fácil y ya está documentado en otra parte .

Lo que estamos haciendo arriba es iniciar casper, luego abrir la URL almacenada en el archivo config.json (o puedes codificarla en el script, lo que funcione para ti). Luego buscamos los cuadros de entrada de correo electrónico y contraseña por el elemento ID, ingresamos los valores y luego presionamos el botón de enviar (o iniciar sesión). Todo esto está envuelto en una evaluación. Lo que es más importante, una vez que se complete lo anterior, queremos esperar unos 10 segundos después de presionar el inicio de sesión solo para asegurarnos de que todo se carga correctamente:

Puede ver que estamos tomando una captura de pantalla después de iniciar sesión para verificar (para la eliminación de errores) que, de hecho, hemos iniciado sesión en nuestra cuenta.

 

https://shift8-stardothostingin.netdna-ssl.com/wp-content/uploads/2018/03/facebook-purge-edit-post-600x462.png 600w, https://shift8-stardothostingin.netdna-ssl.com/wp-content/uploads/2018/03/facebook-purge-edit-post-768x592.png 768w, https://shift8-stardothostingin.netdna-ssl.com/wp-content/uploads/2018/03/facebook-purge-edit-post-1024x789.png 1024w" alt="" width="701" height="540" />

CÓMO EDITAR UNA PUBLICACIÓN DE FACEBOOK EN CASPERJS

Primero queremos ir a la publicación de Facebook. Si ve el guión en su totalidad, se dará cuenta de que accedemos a la versión "de escritorio" de Facebook, y luego, cuando pasemos a la publicación individual, cambiaremos a la vista móvil. Esto se debe a que me resultó mucho más fácil navegar, depurar y diagnosticar las funciones de activación, los clics y el mouse sobre los selectores en la versión móvil. Por razones obvias, Facebook simplifica la interfaz y fue mucho más rápido lograr lo que estamos buscando de esta manera. Lo más probable es que pueda lograr esto en la versión de escritorio del sitio, simplemente tomaría más tiempo aislar todos los selectores y elementos y probar.

En el fragmento anterior, estamos esperando un selector específico que activará ese menú emergente / desplegable al hacer clic para editar una publicación. Desde que hace clic en un disparador de Ajax POST para desplegar las opciones desplegables, queremos asegurarnos de que esté listo antes de hacer clic. Una de las cosas principales que desea tener en cuenta cuando trabaja con CasperJS (y cualquier solución de navegación sin cabeza), es que necesita designar un tiempo entre ciertas acciones para permitir que las cosas se carguen y se llenen.

Una vez que el selector está listo, activamos un "clic" en el botón para traer el enlace de editar publicación.

Una vez que vemos que el enlace de edición se rellena con algunas publicaciones de AJAX en Facebook (hay muchas en Facebook), hacemos clic específicamente en el enlace "Editar publicación" y esperamos. El "waitTime" es una variable global que usamos en todo el script. Hace que sea fácil designar un tiempo de espera común en un punto. Actualmente está configurado en aproximadamente 4 segundos.

A continuación, lo que queremos hacer una vez que aparece la ventana editar entrada (es una ventana modal por cierto, y no es un formulario HTML tradicional), es reemplazar el texto de la publicación con texto generado aleatoriamente. Para generar el texto aleatorio, se usa una función para simplemente juntar vocales y consonantes aleatorias para formar palabras sin sentido al azar. No publicaré esta función aquí, pero puedes verla si la ves en github .

El fragmento de arriba tomó un montón de intentos para hacerlo bien. Hay muchas formas de enviar texto a formularios y áreas de entrada con CasperJS. Puede usar sendkeys o establecer el valor del documento del selector. En nuestro caso, tuvimos éxito al mover el mouse alrededor del área de texto de la publicación primero, luego hacer clic en el área de texto, luego usar un comando jQuery para llenar el texto con las palabras generadas aleatoriamente, guardadas en una variable llamada "random_post".

Esta última parte demoró unos días en probarse. Se podría pensar que presionar un botón con CasperJS es simple, y el 99% del tiempo lo es, cuando se trata de formularios html "tradicionales", o se envían botones y otras cosas. Con la interfaz de Facebook, se necesitaron muchos intentos para que esto funcione, créanme.

Lo que ayudó a comprender cómo funcionaba la interfaz de usuario basada en React fue la depuración exhaustiva y el análisis de la interfaz móvil utilizando los puntos de interrupción del oyente de eventos de Chrome y ejecutando las funciones desencadenantes durante todo el proceso de hacer clic en el botón "Guardar". Simplemente identificando el selector del botón "Guardar" y usando this.click no funcionó. Créeme.

Lo que me doy cuenta es que puede haber más cosas por debajo de la interfaz que las que se pueden analizar fácilmente desde la superficie inspeccionando los elementos y agregando puntos de interrupción. El momento de la realización se produjo cuando agregué el mouse sobre, el mouse hacia abajo, el mouse hacia arriba, el clic y algunos otros puntos de interrupción relacionados con el mouse para ver lo que realmente se dispara al hacer clic en guardar.

Para ir a lo seguro, Básicamente, CasperJS mueve el mouse alrededor del botón Guardar, presiona hacia abajo, suelta y luego vuelve a hacer clic. Lo más probable es que no necesite hacer todo eso, pero después de 2 días de tratar de hacer clic en un botón, pensé que el enfoque completo era el más seguro. ¡Y funciona!

Si tuviera que adivinar por qué el guión podría no funcionar para ti, te sugiero que juegues y ajustes los siguientes elementos:

1. El tiempo de espera puede ser diferente en función de muchos factores, como la velocidad de tu red, la velocidad de tu estación de trabajo y algunas otras cosas, estoy seguro

2. ¡ Los nombres de los elementos pueden ser diferentes! No tengo idea de con qué frecuencia cambian estos. Puede ver hasta hacer clic en el botón "Guardar", estoy usando principalmente atributos de datos que se sienten como que no cambiarán a menudo. Pero podrían hacerlo.

3. También noté que los nombres del selector de elementos pueden cambiar simplemente cambiando el agente de usuario. Esto es completamente posible, pero decidí no ir por ese agujero de conejo, ya que sin duda me haría volverme loco.

ATENCIÓN - Tienes que ser miembro de Amigosdelamili.com para poder participar y escribir con los demás.

PINCHA AQUÍ Y ÚNETE YA A Amigosdelamili.com

Votos 0
Enviarme un correo electrónico cuando me contesten –