我正在尝试在whatsapp web和我的消息中自动发送消息,使用一些很酷的表情符号,但正如您所知,chromedriver默认情况下不使用send_keys()
键入表情符号
因此,对于测试,我的代码基于此answer here,它工作正常,但是如果我尝试发送多个unicode表情符号,则会显示以下错误:
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: missing command parameters
我当前代码的示例:
chatBox = self.driver.find_element_by_class_name('_3uMse')
time.sleep(2)
chatBox.click()
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0], txt = arguments[1];
elm.value += txt;
elm.dispatchEvent(new Event('change'));
"""
text = u'\uD83D\uDC6A'
#using this emoji, it works
#text = u'\u263A'
self.driver.execute_script(JS_ADD_TEXT_TO_INPUT, chatBox, text)
chatBox.send_keys(text)
为什么会这样
编辑1-包含建议更改的完整代码,以帮助消除bug
self.driver.get('https://web.whatsapp.com/')
# time to scan qrcode
time.sleep(8)
contact = self.driver.find_element_by_xpath(f"//span[@title='<NAME_OF_SAVED_CONTACT>']")
contact.click()
chatBox = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, "_3uMse")))
chatBox.click()
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0], txt = arguments[1];
elm.value += txt;
elm.dispatchEvent(new Event('change'));
"""
text = u'\uD83D\uDC6A'
self.driver.execute_script(JS_ADD_TEXT_TO_INPUT, chatBox, text)
chatBox.send_keys(text)
此错误消息
…表示传递给命令的参数无效或格式不正确
无效参数错误主要链接到JavaScript中的TypeErrors,当输入值不是预期类型或在某种程度上格式不正确时,可能会发生这些错误。在这个用例中,问题可能是当您试图通过^{发送表情符号时,
chatBox
不可交互解决方案
一个可能的解决方案是为
element_to_be_clickable()
诱导WebDriverWait,您可以使用以下任一Locator Strategies:代码块:
注意:您必须添加以下导入:
但是,这个代码块在我这方面非常适合发送带有多个Unicode的复杂表情符号,例如family👪 使用
u\uD83D\uDC6A
如下所示:代码块:
浏览器快照:
注
最后,值得一提的是https://web.whatsapp.com/元素是启用了ReactJS的元素。因此类像
_3uMse
是动态生成的,从来不是静态的。您可能需要基于静态属性构造定位器此外,根据Element Send Keys to file input with 'multiple' attribute should append file list中的讨论,您需要确保您的ChromeDriver版本至少为ChromeDriver-75
参考资料
您可以在以下内容中找到一些相关讨论:
奥特罗
ChromeDriver论坛上的两个相关讨论:
相关问题 更多 >
编程相关推荐