嗨,我想在whatsapp发送消息,但我的消息类型在input_box两次


def send_unsaved_contact_message():
global message
try:
time.sleep(10)
browser.implicitly_wait(10)
#input_box = (By.XPATH,"//div[text()='Type a message']")
#input_box = (By.XPATH,"//div[@class='p3_M1']")
input_box = WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR,
"p[class='selectable-text copyable-text']")))
pyperclip.copy(message) # get text in clipboard 
for ch in message:
if ch == "n":
ActionChains(browser).key_down(Keys.SHIFT).key_down(Keys.ENTER).key_up(Keys.ENTER).key_up(
Keys.SHIFT).key_up(Keys.BACKSPACE).perform()
else:
input_box.send_keys(ch)
input_box.send_keys(Keys.CONTROL,"v")
#browser.execute_script(JS_ADD_TEXT_TO_INPUT, elem, text)
whatsapp_send_button = browser.find_element(By.XPATH,
"/html[1]/body[1]/div[1]/div[1]/div[1]/div[4]/div[1]/footer[1]/div[1]/div[1]/span[2]/div[1]/div[2]/div[2]/button[1]/span[1]")
browser.execute_script("arguments[0].click();", whatsapp_send_button)
except Exception as e:
print("Failed to send message exception: ", e)
return

例如,这是我的消息:🌸大家好🌸欢迎来到我的小组组链接:感谢您访问我们的网站:

但是像这样发送输入消息:"大家好"欢迎来到我的小组组链接:感谢您访问我们的网站:🌸大家好🌸欢迎来到我的小组组链接:感谢您访问我们的网站:

可以用

js_send_text = """
function send_text(text) {
const dataTransfer = new DataTransfer();
dataTransfer.setData('text', text);
const event = new ClipboardEvent('paste', {
clipboardData: dataTransfer,
bubbles: true
});
let el = document.querySelector('#main .copyable-area [contenteditable="true"][role="textbox"]')
el.dispatchEvent(event)
}
send_text(arguments[0])
"""
self.driver.execute_script(js_send_text, message)

和检查是否完成输入可以使用:

old = ''
while True:
element = self.driver.find_element(By.CSS_SELECTOR,
'#main .copyable-area [contenteditable="true"][role="textbox"]')
if element.text == old:
break
sleep(1)
old = element.text

发送按钮:

self.driver.execute_script("""document.querySelector('[data-testid="send"]').click()""")

最新更新