【问题标题】:selenium ,how to send emoji to sender in whatsapp with send_keys()?selenium,如何使用 send_keys() 将表情符号发送给 whatsapp 中的发件人?
【发布时间】:2021-10-17 23:14:37
【问题描述】:

selenium,如何使用 send_keys() 在 WhatsApp 中向发送者发送表情符号? .我不想通过单击那个表情符号按钮来发送表情符号,但我只想复制在 whatsapp 的短信中发送给我们的表情符号并将相同的表情符号发送给发件人。在@cruisepandey 的帮助下,我已经尝试过了

chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']")
 for chat in chats:
     print(chat.get_attribute('alt'))




    

上面的代码打印了聊天的所有表情符号。但是通过使用这段代码,这给出了一个错误

chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']")
     for chat in chats:
         print(chat.get_attribute('alt'))
         type = driver.find_element_by_xpath('//div[@data-tab="6"]')
         type.send_keys(chat.get_attribute('alt')) 

此代码给出错误 = 消息:未知错误:ChromeDriver 仅支持 BMP 中的字符

 chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']")
 for chat in chats:
     print(chat.get_attribute('alt'))
     type = driver.find_element_by_xpath('//div[@data-tab="6"]')
     pyperclip.copy(chat.get_attribute('alt'))
     type.send_keys(Keys.CONTROL + "V")
     time.sleep(1) 

                                                                   

我尝试使用此代码发送表情符号,但这实际上是有效的,但它在 whatsapp 类型栏中发送了两次,但在终端中仅针对特定表情符号打印一次,例如它在终端“????”中打印此代码并且在whatsapp类型栏中输入相同的代码“?????????” .任何人都可以帮助我为什么它在 WHATSAPP TYPEBAR 中打印两次,但在终端中只打印一次???我也想将该表情符号附加到列表中,但是在附加该表情符号时,在打印列表后,它会给出一个元素为“无”的列表。这是完整的代码

 from selenium import webdriver
 from selenium.webdriver.common.keys import Keys
 from selenium.webdriver.common.by import By
 from selenium.webdriver.support.ui import WebDriverWait
 from selenium.webdriver.support import expected_conditions  
 import time
 import pyperclip
 driver = webdriver.Chrome(r'C:\Users\PRANAV PATIL\Downloads\chromedriver.exe')
 driver.get(r'https://web.whatsapp.com/')
 searchbox = WebDriverWait(driver, 
     10).until(expected_conditions.presence_of_element_located((By.XPATH, 
     "//div[@id='side']//div//div//label//div//div[@contenteditable='true']")))
 searchbox.send_keys('')  #enter your sender's name
 searchbox.send_keys(Keys.RETURN)
 time.sleep(2)
 chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']")
 for chat in chats:
     print(chat.get_attribute('alt'))
     type = driver.find_element_by_xpath('//div[@data-tab="6"]')
     pyperclip.copy(chat.get_attribute('alt'))
     type.send_keys(Keys.CONTROL + "V")
     time.sleep(1)

【问题讨论】:

    标签: python selenium selenium-webdriver whatsapp emoji


    【解决方案1】:

    所以基本上,你想send_keystype

    你试过了吗:

    type = driver.find_element_by_xpath('//div[@data-tab="6"]')
    type.send_keys(chat.get_attribute('alt'), Keys.RETURN)
    

    更新 1:

    看起来您不能简单地将表情符号等特殊字符发送到 chromedriver,尝试更改您的浏览器(更改为 Firefox 看看是否有帮助)应该可以帮助您解决这个问题。

    另外,如果你想坚持使用 Chrome,你可以试试这样:

    JS_ADD_TEXT_TO_INPUT = """
      var elm = arguments[0], txt = arguments[1];
      elm.value += txt;
      elm.dispatchEvent(new Event('change'));
      """
    type = driver.find_element_by_xpath('//div[@data-tab="6"]')
    driver.execute_script(JS_ADD_TEXT_TO_INPUT, type, chat.get_attribute('alt'))
    

    更新 2:

    使用火狐:

    driver = webdriver.Firefox(executable_path = "D:\geckodriver.exe")
    driver.maximize_window()
    driver.implicitly_wait(30)
    driver.get("https://web.whatsapp.com/")
    wait = WebDriverWait(driver, 20)
    try:
         searchbox = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[class*='copyable-text selectable-text']")))
         searchbox.send_keys('Anvesh')  # enter your sender's name
         searchbox.send_keys(Keys.RETURN)
         print('search was successful')
    except:
         print('there were some error while searching for name')
         pass
    
    time.sleep(2)
    chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']")
    for chat in chats:
        print(chat.get_attribute('alt'))
        type = driver.find_element_by_xpath('//div[@data-tab="6"]')
        type.send_keys(chat.get_attribute('alt'))
        time.sleep(1)
    

    【讨论】:

    • 只给出了 BMP 错误消息:未知错误:ChromeDriver 仅支持 BMP 中的字符
    • 这是错误`Traceback(最近一次调用最后):文件“c:\Users\PRANAV PATIL\Desktop\qr\emoji.py”,第 30 行,在 type.send_keys( chat.get_attribute('alt')) 文件“C:\Users\PRANAV PATIL\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 477 行,在send_keys self._execute(Command.SEND_KEYS_TO_ELEMENT,
    • 文件“C:\Users\PRANAV PATIL\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 633 行,在 _execute返回 self._parent.execute(command, params) 文件“C:\Users\PRANAV PATIL\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 321 行,在执行 self.error_handler.check_response(response) 文件“C:\Users\PRANAV PATIL\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 242 行, 在 check_response raise exception_class(message, screen, stacktrace
    • 不,它实际上继续上面的错误仍然留下错误stackover没有给cmets提供太多空间,还有更多错误如何分享截图?
    • ` JS_ADD_TEXT_TO_INPUT = """ var elm = arguments[0], txt = arguments[1]; elm.value += txt; elm.dispatchEvent(new Event('change')); " "" chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']") 用于聊天中的聊天: print(chat.get_attribute('alt')) type = driver.find_element_by_xpath('/ /div[@data-tab="6"]') type.send_keys(chat.get_attribute('alt')) driver.execute_script(JS_ADD_TEXT_TO_INPUT, type, chat.get_attribute('alt')) print("done") `实际上它给出了同样的错误,这段代码对吗? @cruisepandey
    【解决方案2】:

    关于输入两次:而不是type.send_keys(Keys.CONTROL + "V"),尝试如下。它对我有用。

    type.send_keys(Keys.CONTROL+"v")
    

    【讨论】:

    • 这对我有用 type.send_keys(Keys.CONTROL+"v") thks @pmadhu
    • 此代码 --> chats = driver.find_elements_by_css_selector("img[data-plain-text][crossorigin='anonymous']") for chat in chats: print(chat.get_attribute('alt')) 是代码正在打印发件人和我们的所有表情符号。如果我们只想打印发件人的表情符号怎么办?提示 = 发件人的表情符号有 class="message-in" 而我们的消息有 class="message-out" 实际上我对 CSS 选择器了解不多
    • @PranavPatil - 我会使用这个 xpath //div[contains(@class,'message-in')]//img 从发件人那里获取所有表情符号。
    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多