Comparta WhatsApp Web sin escanear el código QR usando Python

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:

  1. Borrar cookies y refrescar la página: Seguirá siendo login.
  2. Borre localStorage y actualice la página: restaurará el almacenamiento local y permanecerá conectado.
  3. Borre IndexedDB y actualice la página: restaurará IndexedDB y permanecerá conectado.
  4. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *