gpt4 book ai didi

c# - HTML敏捷包: How to check if an element is visible?

转载 作者:行者123 更新时间:2023-12-04 00:43:53 34 4
gpt4 key购买 nike

我正在做一些 HTML 解析,我正在使用 HtmlAgilityPack如果 html 在浏览器中呈现,我正在尝试检查节点元素是否可见。

通过可见性,我可能满足于检查 displayvisibility 样式值。 (除非还有其他我应该担心的事情?)。

那么,我该怎么做呢?有没有简单的构建方法?我可以使用一些 XPath 魔法吗? (我目前对 XPath 了解不多)。

我考虑过手动解析样式值,但宁愿将此作为最后的手段。或者这是我唯一的选择?

仅供引用,我正在使用的对象是这样的:

HtmlAgilityPack.HtmlNode node = GetNode();

最佳答案

好的,所以我设法做到了这一点,至少满足了我的需要。但是请注意,正如其他评论所说,这不允许您检查元素是否对最终用户可见(在屏幕上)。

我采用的方法简单地检查了一些基本规则:如果元素的样式属性包含 display:nonevisibility:hidden,则该元素“不可见” , OR 祖先元素具有相同的样式规则。

考虑到这一点,下面是我的代码,可以为我完成这项工作:

private static bool IsNodeVisible(HtmlAgilityPack.HtmlNode node)
{
var attribute = node.Attributes["style"];

bool thisVisible = false;

if (attribute == null || CheckStyleVisibility(attribute.Value))
thisVisible = true;

if (thisVisible && node.ParentNode != null)
return IsNodeVisible(node.ParentNode);

return thisVisible;
}

private static bool CheckStyleVisibility(string style)
{
if (string.IsNullOrWhiteSpace(style))
return true;

var keys = ParseHtmlStyleString(style);

if (keys.Keys.Contains("display"))
{
string display = keys["display"];
if (display != null && display == "none")
return false;
}

if (keys.Keys.Contains("visibility"))
{
string visibility = keys["visibility"];
if (visibility != null && visibility == "hidden")
return false;
}

return true;
}

public static Dictionary<string, string> ParseHtmlStyleString(string style)
{
Dictionary<string, string> result = new Dictionary<string, string>();

style = style.Replace(" ", "").ToLowerInvariant();

string[] settings = style.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

foreach (string s in settings)
{
if (!s.Contains(':'))
continue;
string[] data = s.Split(':');
result.Add(data[0], data[1]);
}

return result;
}

它的入口点是 IsNodeVisible 并将检查传递给它的 HtmlNode 的可见性。

关于c# - HTML敏捷包: How to check if an element is visible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776840/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com