Проблема в том, как сериализуется CSSStyleDeclaration
. Если именно так Chromium решит сериализовать этот объект, мы ничего не сможем там сделать.
Но мы можем попытаться решить это из JavaScript, используя EvaluateFunctionAsync
.
foreach (var handle in elementHandles)
{
var style = await page.EvaluateFunctionAsync<Dictionary<string, string>>(
"e => Object.entries(e.style).filter(i => isNaN(i[0]) && i[1]).map(i => { return { [i[0]] : i[1]}}).reduce((acc, cur) => { return {...acc, ...cur}}, {})", handle);
var output = style.ToString();
}
Давайтевзгляните на выражение javascript
e=> //We send the HTML element instead of the style property
Object.entries(e.style) //We get all the property/value pairs from the CSSStyleDeclaration object
// We want to exclude number properties (like 0,1,2) and empty values
.filter(i => isNaN(i[0]) && i[1])
//We turn them into objects
.map(i => { return { [i[0]] : i[1]}})
//We merge them into one single object that will be returned to C#
.reduce((acc, cur) => { return {...acc, ...cur}}, {})