Как выбрать элемент внутри фрейма, используя HTMLDocument.getElementById и объект InternetExplorer
У меня есть html
это выглядит так
<html>
<head></head>
<frameset id="workFrame" rows="45,*" border="0" frameSpacing="0">
<frame name="menuFrame" id="menuFrame" src="Test.aspx" frameBorder="0" noResize="noresize" scrolling="no">
<html>
<head></head>
<body>
<form id="form1" action="./Test.aspx" method="post">
<div class="firstDiv"></div>
<div class="firstDiv"></div>
<div class="secondDiv">
<div class="secondDivHeader">
<table>
<tbody>
<tr>
<td></td>
<td class ="secondTD">
<table>
<tbody>
<tr>
<td>
<a id ="anchorOne"></a>
<a id ="anchorTwo" href="Click.html"></a>
<a id ="anchorThree"></a>
</td>
</tr>
</tbody>
</table>
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
</frameset>
</html
Я хочу получить "anchorTwo" и поместить его в HTMLAnchorElement, чтобы я мог щелкнуть по нему. Но когда я пытаюсь сделать это с помощью своего кода, я получаю NULL HTMLAnchorElement. Кто-нибудь знает способ обойти это? Я пытался часами, я не могу найти способ.
Это мой код:
InternetExplorer ieObject = new InternetExplorer();
HTMLDocument htmlDocObject = null;
ieObject.Visible = true;
ieObject.Navigate("http://samplewebsite.com");
while (ieObject.ReadyState != tagREADYSTATE.READYSTATE_COMPLETE || ieObject.Busy)
{
Console.WriteLine("Sleeping for 2 seconds...");
Thread.Sleep(2000);
}
Console.WriteLine($"Website loaded");
htmlDocObject = ieObject.Document;
HTMLFrameElement frame = (HTMLFrameElement)htmlDocObject.getElementById("menuFrame");
Console.WriteLine(frame.name);
Console.WriteLine(frame.src);
HTMLDocument frameDocument = frame.document;
HTMLAnchorElement anchor = (HTMLAnchorElement)frameDocument.getElementById("anchorTwo"); \\null pointer here
anchor.click();
Console.ReadLine();
1 ответ
Использование
HTMLDocument frameDocument = (HTMLDocument)frame.contentWindow.document
вместо
HTMLDocument frameDocument = frame.document;