gpt4 book ai didi

c# - 如何使用 DotNetBrowser 将父 iframe 作为 IElement?

转载 作者:行者123 更新时间:2023-12-04 08:16:54 26 4
gpt4 key购买 nike

我需要编写函数来获取窗口中的真实顶部和左侧元素。
在 DotNetBrowser 中,我们可以获取坐标:

int Y = el.BoundingClientRect.Origin.Y;
int X = el.BoundingClientRect.Origin.X;
但如果元素进入 iframe,它不会给出真正的坐标。
我写了一些获取真实坐标的方法:
public int realY(IElement el)
{
IFrame f = el.Frame;
if (f.IsMain)
{
return el.BoundingClientRect.Origin.Y;
}
else
{
IElement fel = GetElementByAtrTag("iframe", "name", f.Name);
return el.BoundingClientRect.Origin.Y + fel.BoundingClientRect.Origin.Y;
}
}
但它不是通用的,因为 iframe 没有名字(我在这个方法中使用的)或者可以是许多父 iframe。
我尝试另一种方式,对我来说,需要可以将元素父 iframe 作为 IElement,而没有 id 或 name,只有子 IElement,例如:
public IElement FindIframe(IElement el)
{
if (el.Parent.NodeName != "IFRAME")
{

return FindIframe((IElement)el.Parent);
}
else return (IElement)el.Parent;
}
这个方法在到达父 iframe 元素时失败,并且他有 NodeName - #document
我可以采用第一个父 iframe,因此:
IFrame parentElFrame = el.Frame;
但 IFrame 没有 BoundingClientRect。
DotNetBrowser 有 IFrameElement,这个元素有 BoundingClientRect,但我不能将 IFrame 转换为 IFrameElement
我可以去哪里?

最佳答案

我为内部元素创建了返回父 iframe 的方法:

public IElement FindIframe(IElement el)
{
string docframe = el.Frame.Document.DocumentElement.OuterHtml;
IEnumerable<IElement> elements = ActiveTab.browser.MainFrame.Document.DocumentElement.GetElementsByTagName("iframe");
foreach(IElement e in elements)
{
IFrameElement ef = (IFrameElement)e;

if (ef.ContentDocument.DocumentElement.OuterHtml == docframe)
{
return e;
}
}
return null;
}
在我可以制作为 iframe 中的元素获取真实坐标的方法之后:
public Point realPlace(IElement el)
{
Point p = new Point(0, 0);
p.X = el.BoundingClientRect.Origin.X;
p.Y = el.BoundingClientRect.Origin.Y;
if (!el.Frame.IsMain)
{
Point pin = realPlace((IElement)FindIframe(el));
p.X += pin.X;
p.Y += pin.Y;

}
return p;
}

关于c# - 如何使用 DotNetBrowser 将父 iframe 作为 IElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65666853/

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