Selenium VBA使用JS路径向网页textarea元素输入文本的报错问题
问题原因
- 第一种写法报错是因为JS字符串引号嵌套冲突:
querySelector的参数外层已经用了单引号,内部属性选择器placeholder='Say something…'又用了单引号,导致JS语法解析错误,触发缺少)的报错。 - 第二种写法损坏页面是因为定位元素错误:你选中的是
messenger-composer-wrapper父容器,直接修改父容器的innerHTML会把内部原本的textarea元素直接覆盖,破坏原有页面结构。同时不推荐用innerHTML给textarea赋值,应该用标准的value属性避免内容被解析为HTML。
修正后的代码
写法1:修复属性选择器引号冲突
VBA拼接字符串时,给属性选择器的值用双引号包裹(VBA中字符串内的双引号需要用两个双引号转义),同时提前转义输入内容里的单引号避免二次语法冲突:
Dim Textw As String ' 转义输入内容的单引号 Textw = Replace(Textw, "'", "\'") cScript = "document.querySelector('textarea[placeholder=""Say something…""]').value = '" & Textw & "'" bot.ExecuteScript cScript
写法2:用class属性定位更稳定
如果placeholder可能随语言、版本变化,直接用textarea的专属class定位可靠性更高:
Dim Textw As String Textw = Replace(Textw, "'", "\'") cScript = "document.querySelector('textarea.messenger-composer').value = '" & Textw & "'" bot.ExecuteScript cScript
可选补充:触发输入关联事件
如果站点输入后需要触发关联逻辑(比如激活发送按钮、输入校验),可以补充触发input事件的逻辑:
Dim Textw As String Textw = Replace(Textw, "'", "\'") cScript = "const el = document.querySelector('textarea.messenger-composer');el.value = '" & Textw & "';el.dispatchEvent(new Event('input'));" bot.ExecuteScript cScript
内容的提问来源于stack exchange,提问作者Noam Brand
相关产品推荐
相关产品推荐

