3

csvダウンローダープロジェクトに取り組んでいます。Webページで生成されたCSVファイルをダウンロードする必要があります。htmlの敏捷性を使用して、csvファイルのリンクを含む正確なリンクを見つけました

<a href="/content/fo/contractvol/datafiles/OPTIDX_NIFTY_CE_31-08-2012_TO_31-08-2012.csv" target="_blank">Download file in csv format</a>

今、私は、私の側からの活動なしで、アプリケーションがWebページでこのリンクを検出する必要があり(Htmlagilityでそれを行うことができます)、Webページが私のアプリのWebブラウザーで完全にナビゲートされたらファイルをダウンロードする必要があります。SOの投稿の1つでいくつかの例を試しまし が、

エラー:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

HtmlElementCollection links = webBrowser.Document.GetElementsByTagName("A");

foreach (HtmlElement link in links)  // this ex is given another SO post 
{
    if (link.InnerText.Equals("My Assigned"))
        link.InvokeMember("Click");
}

誰かがそれを行う方法を提案できますか?

解決済み:

に変更しHtmlElementCollection links = webBrowser.Document.GetElementsByTagName("A");HtmlElementCollection links = webBrowser1.Document.Links 使用しました

 if (link.InnerText.Contains("My Assigned"))
{
        link.InvokeMember("Click");
}

。より良い解決策を持っている人はいますか?

4

2 に答える 2

1

InnerTextはnullである可能性があるため、nullをチェックするために、セーフガードを組み込みます。

if ((link.InnerText != null) && (link.InnerText.Equals("My Assigned")) )
        link.InvokeMember("Click"); 
于 2012-09-01T12:05:08.120 に答える
1

実際、私はHTMLAgilityパック(かなり悪い)を取り除き、自分でループするだけです。また、innerTextは使用しないでください。例に基づくと、少なくとも1つのリンクにinnertextが含まれていないようです。.href属性を使用して、.csv拡張子を確認します。

link.href.EndsWith(".csv")

また、各ページに複数の.cvがある場合は、URL文字列またはinnertextプロパティを探して調整します。

また、.GetElementsByTagName( "A")が機能しなかった理由は、TagNameが特定のTAGのname属性を参照しているためです。つまり、TagType name = "A"のすべてのTAGを取得するということです...それは意味がありますか?.GetElementsByTag [Type]など、TAGのname属性ではなくタグタイプに基づいて使用できるものがあると思います。

また、.csvファイルをどのようにダウンロードしていますか?「ダウンロードダイアログ」ボックスが表示されますか、それともWebブラウザコントロールにユーザーを表示するだけですか。(あなたがその部分をどのように扱ったか興味があります)。

于 2012-09-01T18:15:37.040 に答える