问题描述
我可以使用此代码从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
读取列表中的每个元素。