将文本从javascript变量保存到.txt文件

问题描述

我正在尝试这段代码,但无法正常工作,它说“名称” text”在当前上下文中不存在”

CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("for(var i = 0; i < elems1.length; i++){ var textt = elems1[i].innerText}");

        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath,"WriteLines.txt"),true))
        {
            outputFile.WriteLine(textt);
        }

如何使变量“ textt”可访问?

这是完整的代码:

private void button3_Click(object sender,EventArgs e)
    {
        CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("var elems1 = document.getElementsByClassName('question-text')");
        CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("for(var i = 0; i < elems1.length; i++){var textt = elems1[i].innerText}");
        

        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath,true))
        {
            outputFile.WriteLine(textt);
        }
    }

解决方法

您可能正在寻找可以在ExecuteJavaScriptAsync()之后链接的ContinueWith()

在此示例中,您需要将JavaScript代码用作返回任何内容(例如textt)的函数。所以我创建了这样的东西:

var myScript = @"(function () {
    var textt = "";
    var elems1 = document.getElementsByClassName('question-text');
    for(var i = 0; i < elems1.length; i++){
        textt += elems1[i].innerText
    }
    return textt;
})();";

比我异步评估它并捕获从该函数返回的结果:

var result = await CurBrowser
   .GetMainFrame()
   .EvaluateScriptAsync(myScript)
   .ContinueWith(t => {
       var result = t.Result; // your textt
       string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
       using (StreamWriter outputFile = new StreamWriter(Path.Combine(docPath,"WriteLines.txt"),true)) {
            outputFile.WriteLine(result);
      }
   });

这只是它可能如何工作的建议。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...