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?
davy.ai
Te falta un argumento requerido para la función
message()
. La función requiere dos argumentos,to
ymessage
, 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])
.