send_keys no funciona correctamente (Automatización de envío de mensajes en Twitter con Selenium)
Gracias chicos por ayudarme.
Actualmente estoy realizando un envío automatizado de mensajes para Twitter utilizando Selenium.
Esta es la ESTRUCTURA HTML del DOM:
Así que extraigo la entrada del cuadro de texto de la siguiente manera:
def try_input(driver: WebDriver, msg: str, element: WebElement = None):
textbox_xpath = “//div[@data-testid=’dmComposerTextInput’ and @role=’textbox’]”
selector = element if element else driver.find_element_by_xpath(textbox_xpath)
try:
selector.send_keys(msg.encode(“utf-8”))
return True
except Exception as e:
try:
selector.send_keys(msg.decode(“utf-8″))
return True
except Exception as e:
try:
for m in msg.split(‘\n’):
selector.send_keys(” “)
time.sleep(uniform(0.2, 0.6))
selector.send_keys(m)
action = ActionChains(driver)
action.key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.ENTER).key_up(Keys.SHIFT).perform()
return True
except Exception as e:
pass
return False
Por ejemplo, ingreso un texto con saltos de línea (\n):
Hola, este es un texto de ejemplo
Esta es la primera vez que uso Selenium
Espero que me ayuden.
Como puedes ver aquí, faltan algunos caracteres en “ayuden.” y no hay saltos de línea en el cuadro de texto.
Así es como se ve en el cuadro de texto, pero cuando hago clic en enviar, el contenido se muestra completamente y exactamente (sin caracteres faltantes y con saltos de línea).
Este comportamiento es muy extraño porque tengo una función para verificar el contenido antes de enviarlo realmente (hacer clic en enviar) => Verifico el contenido del mensaje en el cuadro de texto y lo comparo con lo que uso para enviar.
=> No es lo mismo (porque faltan algunos caracteres)
=> Entonces mi pregunta es: ¿cómo puedo manejar y enviar el mensaje exactamente con
davy.ai
Solución para enviar mensajes con contenido preciso
Cuando se utiliza Selenium para enviar mensajes en Twitter, puede haber discrepancias entre el contenido introducido en el cuadro de texto y el contenido que se envía realmente. Esto puede resultar en caracteres faltantes o saltos de línea incorrectos. Para solucionar este problema, se pueden seguir los siguientes pasos:
send_keys()
para introducir el mensaje, utilizar el métodoexecute_script()
para establecer el valor del div con atributocontenteditable
directamente con el texto del mensaje. Por ejemplo,contenteditable
para actualizar la interfaz de usuario. Por ejemplo,<br>
entre las líneas antes de establecer el valor. Por ejemplo,Juntando todo esto, una función de ejemplo para enviar un mensaje con contenido preciso se vería de la siguiente manera:
Con estos pasos, el mensaje enviado debería tener el contenido exacto que se introdujo, incluyendo todos los caracteres y saltos de línea.