C# 与WebBrowser相关的自定义代码项目,can';在C中找不到特定id的元素#
我一直在一个控制台项目上开发一个基于C#的web浏览器相关程序。现在,这里有一段代码正在Windows窗体应用程序中运行,但在控制台应用程序中,它向我显示了“对象引用未设置为对象实例”。到目前为止,通过调试,通过elementId将所有内容从HTMLElementCollection转换为var,它显示为False,这意味着HTML中没有这样的id。现在,这段代码没有错,因为同样的代码在Windows窗体应用程序中工作得很好。我希望你能理解。在此方面的一点帮助将不胜感激!谢谢 下面提供了一段代码:C# 与WebBrowser相关的自定义代码项目,can';在C中找不到特定id的元素#,c#,html,console,getelementbyid,C#,Html,Console,Getelementbyid,我一直在一个控制台项目上开发一个基于C#的web浏览器相关程序。现在,这里有一段代码正在Windows窗体应用程序中运行,但在控制台应用程序中,它向我显示了“对象引用未设置为对象实例”。到目前为止,通过调试,通过elementId将所有内容从HTMLElementCollection转换为var,它显示为False,这意味着HTML中没有这样的id。现在,这段代码没有错,因为同样的代码在Windows窗体应用程序中工作得很好。我希望你能理解。在此方面的一点帮助将不胜感激!谢谢 下面提供了一段代码
if (browser.ReadyState == WebBrowserReadyState.Complete)
{
//Putting the values inside the boxes
browser.Document.GetElementById("project_title").SetAttribute("value", projectTitle);
browser.Document.GetElementById("article_title").SetAttribute("value", title);
browser.Document.GetElementById("article_content").SetAttribute("value", content);
browser.Document.GetElementById("article_tags").SetAttribute("value", tags);
browser.Document.GetElementById("article_url_1").SetAttribute("value", url);
browser.Document.GetElementById("article_keyword_1").SetAttribute("value", keywords);
browser.Document.GetElementById("article_url_2").SetAttribute("value", url2);
browser.Document.GetElementById("article_keyword_2").SetAttribute("value", keywords2);
browser.Document.GetElementById("article_url_3").SetAttribute("value", url3);
browser.Document.GetElementById("article_keyword_3").SetAttribute("value", keywords3);
HtmlElementCollection lastElementCollection = browser.Document.All;
foreach (HtmlElement webpageelement in lastElementCollection)
{
if (webpageelement.GetAttribute("value").Contains("Submit"))
webpageelement.InvokeMember("click");
}
Console.WriteLine("Please wait for 5 second(s).");
Thread.Sleep(5000);
Console.WriteLine("Post has been submitted successfully!");
}
是否确定浏览器对象已加载正确的内容?首先检查browser.Document元素的innerHtml。(调试时可能需要?是否确定浏览器对象已加载正确的内容?首先检查browser.Document元素的innerHtml。(虽然可能需要调试?您可以尝试以下方法: 只需在代码段的第一个IF语句之前放置一个等待序列;像这样:
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
if (browser.ReadyState == WebBrowserReadyState.Complete)
{
...
更新:
您正在使用DocumentCompleted事件吗?如果WebBrowserDocumentCompletedEventArgs的url属性与您请求的url相同,请检查它们。因为documentcompleted会激发web请求中的所有文件(如js和css文件)。您可以尝试以下方法:
只需在代码段的第一个IF语句之前放置一个等待序列;像这样:
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
if (browser.ReadyState == WebBrowserReadyState.Complete)
{
...
更新:
您正在使用DocumentCompleted事件吗?如果WebBrowserDocumentCompletedEventArgs的url属性与您请求的url相同,请检查它们。因为documentcompleted会触发web请求中的所有文件(如js和css文件)。是什么变量导致“对象引用未设置”显示在这里
browser.Document.GetElementById(“项目标题”).SetAttribute(“值”,项目标题)代码>顺便说一句,projectTitle不是空的,它有一个值,我选中了。projectTitle可能不是空的,但是GetElementById(“项目标题”)似乎是空的。你也检查过了吗?我的问题是为什么它变为空?就在这一行之前,我通过innerText进行了一次调用,但效果很好,没有空值。那么为什么这里为空?是什么变量导致“对象引用未设置”显示在这里browser.Document.GetElementById(“项目名称”).SetAttribute(“值”,项目名称)代码>顺便说一句,projectTitle不是空的,它有一个值,我选中了。projectTitle可能不是空的,但是GetElementById(“项目标题”)似乎是空的。你也检查过了吗?我的问题是为什么它变为空?就在这一行之前,我通过innerText进行了一次调用,但效果很好,没有空值。那为什么在这里是空的?好的。我以前执行过一些.Navigate()
方法<代码>浏览器.Document.All
拥有一切…同样的代码在windows窗体应用程序中工作得非常完美。但是除了这个以外的所有东西在控制台里都不起作用,好的。我以前执行过一些.Navigate()
方法<代码>浏览器.Document.All
拥有一切…同样的代码在windows窗体应用程序中工作得非常完美。但是除了这个以外的所有东西在控制台中都不工作。我们能看到innerHtml值吗?哇,它没有加载整个部分。只有一半。。。最多一个
tag@SaffanAlvy所以当你看到问题变成“为什么它加载了一半…”嘿,我明白了。只需重新加载页面即可获得所有元素。现在编程没有给出任何错误。。。它甚至还提交了博客帖子。但是在我的博客里,没有新的帖子。我想知道为什么?我们能看到innerHtml值吗?哇,它没有加载整个部分。只有一半。。。最多一个
tag@SaffanAlvy所以当你看到问题变成“为什么它加载了一半…”嘿,我明白了。只需重新加载页面即可获得所有元素。现在编程没有给出任何错误。。。它甚至还提交了博客帖子。但是在我的博客里,没有新的帖子。我想知道这是为什么?