c# Webbrowser 如何 select 添加 dom 元素(形成隐藏按钮)并调用按钮上的单击
c# Webbrowser How to select an added dom element (form hidden button) and invoke a click on the button
简单地说,
我正在尝试将带有隐藏按钮和提交按钮的表单标签添加到在 c# 中的网络浏览器中加载的网页。添加后我想调用按钮上的点击事件。
我没有太多代码可以展示,因为我什至无法接近。我在 google 中找不到这样的例子。
我尝试使用创建元素,然后使用 InsertAdjacentElement,这在我检查 HtmlDoc 时似乎有效,但是当我尝试通过 ID 获取元素时,它总是 returns null。
System.Windows.Forms.HtmlDocument doc = harvester.Document;
string ftm = "<form Id = 'SD' method='POST' action='day.cfm'><input type='hidden' name='Day' value='" + selDay + "'><input id='SubmitDay' type='submit' value='View the Schedule'></form>";
var divElem = doc.CreateElement("div");
divElem.InnerText = ftm;
divElem = doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin, divElem);
HtmlElement button = doc.GetElementById("SubmitDay");
// button = null, always.
感谢您的帮助。
图像显示插入表格后的DOM。
所以这是有效的代码...
仅供参考:selDay 和 wordDay 只是包含日期
的字符串变量
System.Windows.Forms.HtmlDocument doc = harvester.Document;
const string quote = "\"";
string ftm = "<form Id = 'SD' method='POST' action='schedule.cfm'><input type='hidden' name='Day' value=" + quote + selDay + quote+ ">" + wordDay + "<input id='SubmitDay' type='submit' value='View the Schedule'></form>";
var divElem = doc.CreateElement("div");
divElem.InnerHtml = ftm;
divElem = doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin, divElem);
HtmlElement button = doc.GetElementById("SubmitDay");
button.InvokeMember("click");
我会以不同的方式处理这个问题。我不会尝试使用 .NET HtmlElements 创建 HTML 文档,而是简单地构造一个包含我的网页内容的字符串变量。作为其中的一部分,我会创建一个简短的 javascript,它会在页面打开时触发(这样您就不需要提交按钮)。
最后,页面完成后,我会打开一个浏览器对象,它会完成它的事情。
或者,您可以使用 HttpPost (https://msdn.microsoft.com/en-us/library/microsoft.activities.messaging.httppost(v=azure.10).aspx) class 做同样的事情(无需创建网页)。
根据屏幕截图,您正试图通过设置 InnerText
属性 将 HTML 注入页面。来自 MSDN documentation 对于这个 属性:
If you attempt to assign HTML to an element with InnerText, the HTML code will display as literals in the document, just as if you were viewing HTML within a text file.
这意味着您的 form
和 input
元素被注入页面 escaped -- <form>
而不是 <form>
,所以当您搜索 DOM 按钮时,它不存在。
请尝试使用 InnerHtml
。
简单地说,
我正在尝试将带有隐藏按钮和提交按钮的表单标签添加到在 c# 中的网络浏览器中加载的网页。添加后我想调用按钮上的点击事件。
我没有太多代码可以展示,因为我什至无法接近。我在 google 中找不到这样的例子。
我尝试使用创建元素,然后使用 InsertAdjacentElement,这在我检查 HtmlDoc 时似乎有效,但是当我尝试通过 ID 获取元素时,它总是 returns null。
System.Windows.Forms.HtmlDocument doc = harvester.Document;
string ftm = "<form Id = 'SD' method='POST' action='day.cfm'><input type='hidden' name='Day' value='" + selDay + "'><input id='SubmitDay' type='submit' value='View the Schedule'></form>";
var divElem = doc.CreateElement("div");
divElem.InnerText = ftm;
divElem = doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin, divElem);
HtmlElement button = doc.GetElementById("SubmitDay");
// button = null, always.
感谢您的帮助。
图像显示插入表格后的DOM。
所以这是有效的代码... 仅供参考:selDay 和 wordDay 只是包含日期
的字符串变量System.Windows.Forms.HtmlDocument doc = harvester.Document;
const string quote = "\"";
string ftm = "<form Id = 'SD' method='POST' action='schedule.cfm'><input type='hidden' name='Day' value=" + quote + selDay + quote+ ">" + wordDay + "<input id='SubmitDay' type='submit' value='View the Schedule'></form>";
var divElem = doc.CreateElement("div");
divElem.InnerHtml = ftm;
divElem = doc.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin, divElem);
HtmlElement button = doc.GetElementById("SubmitDay");
button.InvokeMember("click");
我会以不同的方式处理这个问题。我不会尝试使用 .NET HtmlElements 创建 HTML 文档,而是简单地构造一个包含我的网页内容的字符串变量。作为其中的一部分,我会创建一个简短的 javascript,它会在页面打开时触发(这样您就不需要提交按钮)。
最后,页面完成后,我会打开一个浏览器对象,它会完成它的事情。
或者,您可以使用 HttpPost (https://msdn.microsoft.com/en-us/library/microsoft.activities.messaging.httppost(v=azure.10).aspx) class 做同样的事情(无需创建网页)。
根据屏幕截图,您正试图通过设置 InnerText
属性 将 HTML 注入页面。来自 MSDN documentation 对于这个 属性:
If you attempt to assign HTML to an element with InnerText, the HTML code will display as literals in the document, just as if you were viewing HTML within a text file.
这意味着您的 form
和 input
元素被注入页面 escaped -- <form>
而不是 <form>
,所以当您搜索 DOM 按钮时,它不存在。
请尝试使用 InnerHtml
。