我正在尝试使用python中的硒访问文本框来执行javascript。我已经成功输入了消息,但是需要模拟“输入”键盘事件来提交消息。我绝对是HTML和Javascript的初学者,但据我了解,该文本框没有输入ID,只有内容可编辑的文本字段,这可能会引起问题。
以前,我尝试使用硒通过其id,xpath和类名以及使用send_keys来访问textbox元素。这没有用,因为我收到“键盘无法到达的元件”错误。现在,我试图直接在浏览器(firefox)中执行javascript。发送“你好,世界!”通过编辑p-tag部分的内部html可以工作,但是我不能按Enter。到目前为止,我已经尝试使用带有以下代码的dispatchEvent,该代码在浏览器控制台中不会显示任何错误,但是不会输入消息。
driver.execute_script("document.querySelector('#msg_input > div:nth-child(1) > p:nth-child(1)').innerHTML = '" + "hello world!" + "'") #this line works
driver.execute_script("""
const keyEnterEvent = new KeyboardEvent('keyboard', {
bubbles: true, cancelable: true, keyCode: 13
});
document.querySelector('#msg_input > div:nth-child(1) > p:nth-child(1)').dispatchEvent(keyEnterEvent);
""") #this part does not work
我希望获得这种或类似的方法来模拟Enter键的工作,任何帮助将不胜感激!
答案 0 :(得分:0)
我刚刚在Mozilla文档(https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable)上测试了'contenteditable'元素,看来可以通过单击该元素,键入然后在其中跳出标签来进行编辑(而不是按Enter按您的示例)。
如果您不是在无头浏览器中运行自动化程序,则可以通过查找元素的X,Y坐标在AppRobotic之类的宏功能中对此进行模拟:
import win32com.client
x = win32com.client.Dispatch("AppRobotic.API")
from selenium import webdriver
# navigate to Google
driver = webdriver.Firefox()
driver.get('https://www.google.com')
# use UI Item Explorer tool to find the X,Y coordinates of Search box
x.MoveCursor(438, 435)
# click inside Search box
x.MouseLeftClick
x.Type("hello world!")
x.Type("{TAB}")
x.Type("{ENTER}")