繁体   English   中英

如何使用自动快捷键获取textarea文本值?

[英]How can I get textarea text value with autohotkey?

我正在尝试使用https://www.tutorialspoint.com/online_java_formatter.htm格式化Java代码。 但是我从textarea获取文本有问题,我正在尝试从以下textarea获取文本。

<textarea class="ace_text-input" style="width: 6.59px; height: 14.05px; right: 428.4px; bottom: 511.79px; opacity: 0;" spellcheck="false" wrap="off"></textarea>

自动热键代码:

;code beautifier java
^+b::
Send ^c
formatter := "https://www.tutorialspoint.com/online_java_formatter.htm"
(pwb2 := ComObjCreate("InternetExplorer.Application")).Visible:=True
pwb2.navigate(formatter)
while pwb2.busy
    sleep 15

pwb2.document.getElementsByTagName("textarea")[0].value=Clipboard
pwb2.document.getElementById("beautify").Click()
sleep 5000
Clipboard := pwb2.document.getElementsByTagName("textarea")[1].innerHTML
Send, ^v
pwb2.quit()
Return

问题在于,您用来格式化代码的网站没有使用普通的<textarea> ,而是使用了此代码编辑器 如果您查看站点源代码底部附近的JavaScript,您会发现使用了其中两个编辑器( editoroutputeditor )。 它们的setValuegetValue方法可用于处理其内容。

要在AHK中执行此操作,您可以在页面中创建一个元素,其内容将保存剪贴板数据,然后保存格式设置的结果。 pwb2.document.parentWindow.execScript可用于执行JavaScript,以使用剪贴板元素中的数据与编辑器进行交互。

^+b::
Clipboard := ""
Send {Ctrl Down}c{Ctrl Up}
ClipWait 1
if ErrorLevel {
    MsgBox Java formatter error: Clipboard is empty
    return
}
java := Clipboard

formatter := "https://www.tutorialspoint.com/online_java_formatter.htm"
pwb2 := ComObjCreate("InternetExplorer.Application")
pwb2.navigate(formatter)
while pwb2.busy
    sleep 15

d := pwb2.document
ahkData := d.createElement("div")
ahkData.id := "ahkData"
ahkData.hidden := true
ahkData.innerText := java
d.body.appendChild(ahkData)

js =
(
    var ahkData = document.getElementById('ahkData');
    var marker = "//AHKDATA\n";
    editor.setValue(marker + ahkData.innerText);
    outputeditor.on("change", function(e) {
        var value = outputeditor.getValue();
        if (value.indexOf(marker) !== -1) {
            ahkData.innerText = value.substring(marker.length);
            ahkData.hidden = false;
        }
    });
    document.getElementById("beautify").click();
)

d.parentWindow.execScript(js)

while ahkData.hidden
    sleep 150

Clipboard := ahkData.innerText
Send ^v
pwb2.quit()
Return

请注意,美化按钮的单击处理程序在outputeditor更新之前会返回,因为它只是发送带有未格式化代码的异步POST请求,因此我向outputeditor的change事件添加了回调,该回调将在请求完成并更新编辑器时运行。 此回调中的marker用于区分由于最初包含在网站上的代码而导致的outputeditor更改事件与格式化我们的代码后发生的事件之间的区别。 我以为您不想看到IE窗口并删除了它的可见性,但是如果您希望它可见,则需要使用WinWaitActive或类似的方法来等待IE窗口关闭并返回上一个(复制自)发送Ctrl + v之前,窗口再次变为活动状态。

由于格式化实际上是通过POST请求完成的,因此您可以改用WinHttp.WinHttpRequest.5.1 COM对象复制请求。 但是,IMO(至少在AHK中)比较麻烦,因为您必须在剪贴板中手动编码Java代码。

我怎样才能得到一个文本<textarea>&lt;i&gt;in a webpage?&lt;/div&gt;&lt;/i&gt;&lt;b&gt;在网页中?&lt;/div&gt;&lt;/b&gt;</textarea><div id="text_translate"><p> Html:</p><pre> &lt;body&gt; &lt;textarea readonly id="txtImagename1" name="txtImagename1" rows="1000" cols="200"&gt; testing second line &lt;/textarea&gt; &lt;/body&gt; &lt;/html&gt;</pre><p> 如何通过 c# 代码获取 textarea 中的文本?</p><blockquote><p> (测试\n第二行)</p></blockquote></div>

[英]How can I get the text of a <textarea> in a webpage?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM