PowerShell操作IE:TextArea写入内容无法插入换行的问题求助
解决IE中PowerShell向TextArea插入换行符的问题
我之前也碰到过IE COM对象操作textarea换行的坑,你遇到的问题是因为直接给value属性赋值时,IE没有把\n或\r\n解析成换行,而是当成了普通文本字符。下面给你几个可靠的解决办法:
方法1:使用系统原生换行符
用[Environment]::NewLine代替手动输入的换行符,它会自动匹配当前系统的换行格式(Windows下就是\r\n),IE能正确识别:
# 先获取textarea元素(注意你的HTML里是name="Protocol",不是id,所以用getElementsByName) $textarea = $ie.Document.getElementsByName("Protocol")[0] # 插入带换行的内容 $textarea.value = "第一行文本$([Environment]::NewLine)第二行文本$([Environment]::NewLine)第三行文本"
方法2:通过页面JavaScript设置
直接调用浏览器的JavaScript引擎来赋值,这种方式更贴近页面本身的处理逻辑,兼容性更好:
$ie.Document.parentWindow.execScript(@" document.driver.Protocol.value = '第一行文本\r\n第二行文本\r\n第三行文本'; "@, "javascript")
这里利用了你的form名称driver,直接通过document.driver.Protocol定位textarea,比getElementById更贴合你的HTML结构。
方法3:使用TextRange对象插入
如果前两种方法都不行,试试用IE的TextRange对象来操作,这种方式是模拟用户输入,换行肯定会生效:
$textarea = $ie.Document.getElementsByName("Protocol")[0] # 先让textarea获得焦点 $textarea.focus() # 创建文本范围对象 $range = $ie.Document.selection.createRange() # 设置带换行的文本 $range.text = "第一行文本`r`n第二行文本`r`n第三行文本"
另外注意下,你提问里的PowerShell代码写了getElementById("Protocoll"),但你的HTML里textarea的name是Protocol(少一个l),如果这不是笔误的话,应该改成getElementsByName("Protocol")[0]来获取元素,因为你的textarea没有设置id属性哦。
内容的提问来源于stack exchange,提问作者user5462886
相关产品推荐
相关产品推荐

