c#如何从cefsharp Chromium浏览器获取所有行值?

问题描述

我可以使用此代码从cefsharp Chromiumwebbrowser 获取表格第一行的td 值,但我需要所有行的值。如何获取每一行的值?谢谢解答。

private void GetTable ()
 {
const string script = @"(function(){
    let table = document.querySelector('table'); // <table class='table table-striped'>
    let td = table.getElementsByTagName('td');
    return [ td[0].innerText,td[1].innerText ];
})();";
browser.GetMainFrame().EvaluateScriptAsync(script).ContinueWith(x =>
{
    var response = x.Result;

    if (response.Success && response.Result != null)
    {
        // We cast values as CefSharp wouldn't kNow what to expect
        List<object> jsResult = (List<object>)response.Result;

        string s1 = (string)jsResult[0]; // td[0].innerText
        string s2 = (string)jsResult[1]; // td[1].innerText

        Console.WriteLine("s1: " + s1);
        Console.WriteLine("s2: " + s2);
        // In my example HTML page,it will output:
        // s1: This is 1st
        // s2: This is 2nd
    }
});

}

我从 https://stackoverflow.com/a/55731493/3809268 那里得到了这个代码,感谢这个代码所有者。

解决方法

首先,您需要更改 script 的一部分。 试试这个:

.
.
.
let td = table.getElementsByTagName('td');
let arr = [];
for (var i = 0; i < td.length; i++) {
    arr.push(td[i].innerText);
}
return arr;

然后更改 C# 代码:

.
.
.
if (response.Success && response.Result != null)
{
    List<object> jsResult = (List<object>)response.Result;

    foreach (var item in jsResult)
    {
        Console.WriteLine("s: " + item.ToString());
    }
}

script 中,我们创建了包含每个 innerText 元素的 td 的数组。然后使用 foreach 读取列表中的每个元素。