如何在Selenium C#中向shadow-root下的textarea发送按键?代码失效求助
问题:JS自动发送聊天文本失败,触发回车键无效
我写了一段嵌在C#里的JavaScript代码,试图自动在聊天框发送指定文本,但完全没有效果,触发回车键的操作也不起作用。
我的代码:
string scriptToSendAndPressEnter = @" let textarea = document.querySelector('#root > div > div > div.chatroom-module__chatroom__eVUaK > div.chatroomEditor-module__editor_area__1UsgR > textarea-ex').shadowRoot.querySelector('textarea'); textarea.focus(); textarea.value = 'this text i want to send'; textarea.dispatchEvent(new Event('input', { 'bubbles': true })); var keyPressEvent = new KeyboardEvent('keypress', { bubbles: true, cancelable: true, keyCode: 13 }); textarea.dispatchEvent(keyPressEvent); "; js.ExecuteScript(scriptToSendAndPressEnter); Thread.Sleep(5000);
聊天框HTML结构截图:

解决建议:
修正代码结构错误
你原本把C#的js.ExecuteScript()和Thread.Sleep()写到了JS字符串内容里,这部分属于C#代码,必须移出JS脚本范围,放在C#代码块中(如上面修正后的代码所示)。替换废弃的键盘事件
keypress事件已被浏览器废弃,改用keydown或keyup事件,同时避免使用已废弃的keyCode,改用标准的key属性指定回车键:// 替换原键盘事件代码 var enterEvent = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'Enter' }); textarea.dispatchEvent(enterEvent); // 可选:再触发keyup事件,模拟完整按键流程 textarea.dispatchEvent(new KeyboardEvent('keyup', { key: 'Enter', bubbles: true }));验证Shadow DOM元素选择
在浏览器控制台单独执行以下代码,确认能正确获取到textarea元素:document.querySelector('#root > div > div > div.chatroom-module__chatroom__eVUaK > div.chatroomEditor-module__editor_area__1UsgR > textarea-ex').shadowRoot.querySelector('textarea')如果返回
null,说明选择器有误,需要重新定位元素。补充触发必要事件
部分前端框架会监听change事件,除了input事件,额外触发change事件确保文本内容被框架识别:textarea.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));尝试直接触发提交按钮(更可靠)
如果聊天界面有明确的发送按钮,直接找到按钮并触发点击事件,比模拟回车更稳定:// 替换为实际发送按钮的选择器 let sendBtn = document.querySelector('.chatroomEditor-module__send_btn__xxx'); if (sendBtn) sendBtn.click();
内容的提问来源于stack exchange,提问作者PoCoNoi
相关产品推荐
相关产品推荐

