es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasando argumentos a un script de Python.

Tengo el siguiente código en python (script.py):

import sys
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

def message(to, message):
    """Esta es una función simple para enviar un mensaje de WhatsApp a tus amigos
    y al grupo utilizando Python y Selenium, una herramienta automatizada para analizar el contenido HTML 
    y cambiar las propiedades.

parametros:
to - ingrese un nombre de sus contactos, puede ser el nombre de un amigo o el título de un grupo.
message - mensaje a entregar
    """
    options = Options()
    options.add_argument("--user-data-dir=C:/Users/Miguelangel/Desktop/chrome-data")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)

    d = webdriver.Chrome(r'C:/Users/Miguelangel/Desktop/chromedriver.exe', options=options)
    d.get('https://web.whatsapp.com/')                  # URL para abrir whatsapp web
    wait = WebDriverWait(driver=d, timeout=900)         # aumentar o disminuir el tiempo de espera según su conexión a internet

    message += '\núltima línea'
    # texto adicional con su mensaje para identificar que se envía a través del software

    name_argument = f'//span[contains(@title,"{to}")]'        # código de análisis HTML para identificar a su receptor
    title = wait.until(EC.presence_of_element_located((By.XPATH, name_argument)))
    title.click()                           # para abrir la página de mensajes del receptor en el navegador

    # muchas veces el nombre de la clase u otras propiedades HTML cambian, así que lleva un registro del nombre de la clase actual para el cuadro de entrada usando inspeccionar elementos
    input_path = '//div[@class="_13NKt copyable-text selectable-text"][not(@contenteditable)][@data-tab="9"]'
    box = wait.until(EC.presence_of_element_located((By.XPATH, input_path)))

    box.send_keys(message + Keys.ENTER)


message(sys.argv[1], sys.argv[2])

Luego ejecuto lo siguiente desde la línea de comandos:

python script.py Test sometext

o

python script.py “Test” “sometext”

o

python script.py ‘Test’ ‘sometext’

Pero ninguno de ellos funcionó, obtengo: TypeError: message() falta un argumento posicional requerido: ‘message’

¿Qué estoy haciendo mal?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Te falta un argumento requerido para la función message(). La función requiere dos argumentos, to y message, pero estás pasando solo un argumento al llamar a la función. Deberías llamar a la función así: message(sys.argv[2], sys.argv[3]).

Comments are closed.