Requisito previo: Selenium , Automatización del navegador usando Selenium
En este artículo, vamos a ver cómo compartir su Web-WhatsApp con cualquier persona a través de Internet sin escanear un código QR.
Sesiones de tienda Web-Whatsapp
Web Whatsapp almacena sesiones en IndexedDB con el nombre wawc y sincroniza esos pares clave-valor con el almacenamiento local. IndexedDB almacena los datos dentro del navegador del usuario y permite crear una aplicación web que puede consultar desde esta indexedDB con o sin conexión a la red.
Cómo obtener una sesión:
Podemos resolverlo intentando lo siguiente. Tomaremos la ayuda de la herramienta de desarrollo de Chrome .
Pasos:
- Borrar cookies y refrescar la página: Seguirá siendo login.
- Borre localStorage y actualice la página: restaurará el almacenamiento local y permanecerá conectado.
- Borre IndexedDB y actualice la página: restaurará IndexedDB y permanecerá conectado.
- Ahora borre localStorage e IndexedDB: se cerrará la sesión.
Demostración de pasos:
Extraer sesiones de IndexedDB:
Podemos extraer sesiones de IndexedDB usando el siguiente javascript.
Javascript
function getResultFromRequest(request) { return new Promise((resolve, reject) => { request.onsuccess = function (event) { resolve(request.result); }; }); } async function getDB() { var request = window.indexedDB.open("wawc"); return await getResultFromRequest(request); } async function readAllKeyValuePairs() { var db = await getDB(); var objectStore = db.transaction("user").objectStore("user"); var request = objectStore.getAll(); return await getResultFromRequest(request); } session = await readAllKeyValuePairs(); console.log(session);
Podemos intentar ejecutar el código anterior en la consola o pestaña del navegador donde abrimos Web-Whatsapp y veremos el resultado de la siguiente manera que contiene pares clave-valor de sesión.
Ahora obtenemos esos pares clave-valor como texto ejecutando la siguiente línea de código.
Javascript
JSON.stringify(session);
Ahora copiemos ese texto en un archivo para guardar una sesión y borre localStorage e IndexedDB para cerrar la sesión. Ahora podemos ejecutar el siguiente código para inyectar una sesión asignando el valor de la string de sesión que acabamos de copiar en un archivo a la variable SESSION_STRING. Luego actualice la página y volveremos a iniciar sesión sin escanear el código QR.
Javascript
function getResultFromRequest(request) { return new Promise((resolve, reject) => { request.onsuccess = function(event) { resolve(request.result); }; }) } async function getDB() { var request = window.indexedDB.open("wawc"); return await getResultFromRequest(request); } async function injectSession(SESSION_STRING) { var session = JSON.parse(SESSION_STRING); var db = await getDB(); var objectStore = db.transaction("user", "readwrite").objectStore("user"); for(var keyValue of session) { var request = objectStore.put(keyValue); await getResultFromRequest(request); } } var SESSION_STRING = ""; await injectSession(SESSION_STRING);
Automatización del proceso de generación de un archivo de sesión e inyección de una sesión:
Podemos automatizar el proceso de generar un archivo de sesión que contiene nuestros pares clave-valor de sesión y también leer los pares clave-valor de sesión de ese archivo de sesión generado para inyectar una sesión en el navegador para abrir Web-WhatsApp sin escanear el código QR
Podemos automatizar de la siguiente manera:
Tome la ruta del archivo de sesión como un argumento de línea de comandos.
Generando archivo de sesión:
- Abra el navegador Chrome.
- Abre Web Whatsapp.
- Pide al usuario que escanee el código QR.
- Espere a que se escanee el código QR.
- Ejecute javascript en el navegador y extraiga la sesión.
- Guarde el archivo con un archivo de texto de sesión con la extensión de archivo personalizada «.wa».
- Cierra el navegador.
Archivo de sesión de apertura:
- Verifique que el archivo de sesión exista.
- Lea el archivo dado en la variable «sesión».
- Abra el navegador Chrome.
- Abre Web Whatsapp.
- Espere a que Web Whatsapp se cargue correctamente.
- Ejecute javascript en el navegador para inyectar sesión usando la variable «sesión».
- Recarga la página.
- Solicite al usuario que presione la tecla Intro para cerrar el navegador.
A continuación se muestra la implementación:
Nota: descargue chormedrive antes de ejecutar el código.
Al usar WebDriverWait de Selenium, podemos esperar a que algunos elementos estén presentes en el navegador de la siguiente manera:
Python3
def _wait_for_presence_of_an_element(browser, selector): element = None try: element = WebDriverWait(browser, DEFAULT_WAIT).until( EC.presence_of_element_located(selector) ) except: pass finally: return element
Generando archivo de sesión:
Python3
def sessionGenerator(sessionFilePath): # 1.1 Open Chrome browser browser = webdriver.Chrome() # 1.2 Open Web Whatsapp browser.get("https://web.whatsapp.com/") # 1.3 Ask user to scan QR code print("Waiting for QR code scan...") # 1.4 Wait for QR code to be scanned _wait_for_presence_of_an_element( browser, MAIN_SEARCH_BAR__SEARCH_ICON) # 1.5 Execute javascript in browser and # extract the session text session = browser.execute_script(EXTRACT_SESSION) # 1.6 Save file with session text file with # custom file extension ".wa" with open(sessionFilePath, "w", encoding="utf-8") as sessionFile: sessionFile.write(str(session)) print("Your session file is saved to: " + sessionFilePath) # 1.7 Close the browser browser.close()
Utilice los métodos anteriores para generar el archivo de sesión:
Python3
from session import * import sys # Taked session file path as command line # argument and passed to following method sessionFilePath = sys.argv[1] sessionGenerator(sessionFilePath)
Archivo de sesión de apertura:
Python3
def sessionOpener(sessionFilePath): # 2.1 Verify that session file is exist if sessionFilePath == "": raise IOError('"' + sessionFilePath + '" is not exist.') # 2.2 Read the given file into "session" variable with open(sessionFilePath, "r", encoding="utf-8") as sessionFile: session = sessionFile.read() # 2.3 Open Chrome browser browser = webdriver.Chrome() # 2.4 Open Web Whatsapp browser.get("https://web.whatsapp.com/") # 2.5 Wait for Web Whatsapp to be loaded properly _wait_for_presence_of_an_element(browser, QR_CODE) # 2.6 Execute javascript in browser to inject # session by using vaarible "session" print("Injecting session...") browser.execute_script(INJECT_SESSION, session) # 2.7 Refresh the page browser.refresh() # 2.8 Ask for user to enter any key to close browser input("Press enter to close browser.")
Utilice los métodos anteriores para abrir el archivo de sesión:
Python3
from session import * import sys # Taked session file path as command line # argument and passed to following method sessionFilePath = sys.argv[1] sessionOpener(sessionFilePath)
Podemos generar un archivo de sesión usando el siguiente comando:
Para generar el archivo de sesión:
python session_generator.py session.wa
Después de generar el archivo de sesión, compártalo con alguien y coloque ese archivo de sesión en la misma carpeta donde se encuentra session_opener.py y ejecute el siguiente comando para abrir Web Whatsapp sin escanear el código QR
Para el archivo de sesión de apertura:
python session_opener.py session.wa
O abra PowerShell normalmente sin ir a la carpeta y proporcione las rutas absolutas de la siguiente manera
Para generar el archivo de sesión:
python E:\share-web-whatsapp\session_generator.py E:\share-web-whatsapp\session.wa
Para el archivo de sesión de apertura:
python E:\share-web-whatsapp\session_opener.py E:\share-web-whatsapp\session.wa
Publicación traducida automáticamente
Artículo escrito por tithimukherjee y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA