1

私は、コンソール プロジェクトで C# ベースの Web ブラウザー関連のプログラムに取り組んできました。ここで、Windows フォーム アプリケーションで動作しているコードの一部を示しますが、コンソールアプリケーションでは、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。これまでのところ、デバッグを行い、HTMLElementCollectionからすべてのものを elementId によって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!");
}
4

2 に答える 2

1

ブラウザ オブジェクトが正しいコンテンツをロードしたことを確信していますか? 最初に browser.Document 要素の innerHtml を確認してください。(デバッグ中に?)

于 2012-10-09T12:12:49.897 に答える
0

あなたはこれを試すことができますか:

コードスニペットの最初のIFステートメントの前に待機シーケンスを配置するだけです。このような:

while (browser.ReadyState != WebBrowserReadyState.Complete)
{  
  Application.DoEvents();
}

if (browser.ReadyState == WebBrowserReadyState.Complete)
{
...

更新:DocumentCompletedイベントを使用していますか?WebBrowserDocumentCompletedEventArgsのurlプロパティを、要求したURLと同じであるかどうかを確認します。documentcompletedは、Webリクエスト内のすべてのファイル(jsファイルやcssファイルなど)に対して起動するためです。

于 2012-10-09T12:31:32.297 に答える