divクラスの高さを取得する

c# css html-agility-pack uwp

質問

C# classの高さを得る方法はありますか?私はHTMLAgilitPackを使ってノードを取得しています。ここに私のコードです。

private async void GetCldInfos()
    {
        string sURL = @"https://m.investing.com/economic-calendar/";
        using (HttpClient clientduplicate = new HttpClient())
        {
            clientduplicate.DefaultRequestHeaders.Add("User-Agent",
                "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident / 6.0)");

            using (HttpResponseMessage responseduplicate = await clientduplicate.GetAsync(sURL))
            using (HttpContent contentduplicate = responseduplicate.Content)
            {
                try
                {
                    string resultduplicate = await contentduplicate.ReadAsStringAsync();

                    var websiteduplicate = new HtmlDocument();
                    websiteduplicate.LoadHtml(resultduplicate);
                    var News = websiteduplicate.DocumentNode.Descendants("div").Where(o => o.GetAttributeValue("class", "") == "js-economic-calendar").Single();
                    //get height here
                }
                catch (Exception ex1)
                {
                    throw ex1.InnerException;
                }
            }
        }
    }

編集:ここはイメージです: ここに画像の中で私はそれが高さだと思われる。プログラムでその高さを得る方法はありますか?私はscrollviewerでそれを実装したい。私はブラウザのスクロールバーを無効にしているので、私は私のものを使うことができます。そして私はフォームに合うようにscrollviewersの高さを設定する必要があります...

受け入れられた回答

これは、インラインのjavascriptを使用してDOM要素の高さを取得するために、ヘッドレスブラウザWatinを使用するソリューションです。

まずWatinを実行することにより、Visual StudioのNugetパッケージマネージャーコンソールを使用してインストールします。

PM> Install-Package WatiN

Watinヘッドレスブラウザをうまくインストールした後は、このように使用してページに移動し、単純なjavascriptを実行して要素の高さを取得することができます:

using WatiN.Core;
...

private void buttonGetElementHeight_Click(object sender, EventArgs e)
{
    WatiN.Core.Settings.Instance.MakeNewIeInstanceVisible = false;
    IE browser = new IE();

    browser.GoToNoWait("https://m.investing.com/economic-calendar/");
    browser.WaitUntilContainsText("Filters");

    var height = browser.Eval("document.getElementsByClassName('js-economic-calendar')[0].offsetHeight");
    labelResult.Text = String.Format("Element height is {0}px", height);

    browser.ForceClose();
}

高さを取得する作業ボタンの画面キャプチャを次に示します。

画面キャプチャ

EDIT

これはテストであり、評価されているC#WatinオブジェクトインラインJavaScriptの両方のエラー処理を実装する必要があることに注意してください。

更新

Windows.UI.Xaml.Controls.WebViewを使用してそれを行う方法は次のとおりです。

private async void webView1_LoadCompleted(object sender, NavigationEventArgs e)
{
    var offsetHeight = await webView1.InvokeScriptAsync("eval", new string[] {
        "document.getElementsByClassName('js-economic-calendar')[0].offsetHeight.toString()"
    });
    textBox.Text = offsetHeight;
}

private async void button_Click(object sender, RoutedEventArgs e)
{
    webView1.LoadCompleted += webView1_LoadCompleted;
    webView1.Navigate(new Uri("https://m.investing.com/economic-calendar/"));
}

私の作業画面キャプチャ:

WebViewの画面キャプチャ


人気のある回答

私は高さがブラウザによって計算されるので、そうは思わない。

このタイプのHTMLを事前に準備してから計算しなければなりません。


更新:JavaScriptを使用して高さを取得したい場合は、簡単です。

あなたのスリムスクロールを使用するビューをラップしているdivを取得する

function getsize() {
            var el = $('#divIdYouWantSize'),
//current eight of your div
               curHeight = el.height(),
//set div height using CSS style
               autoHeight = el.css('height', $(window).height() ).height();
//try animating the resize so it looks pretty
                el.height(curHeight).animate({ height: autoHeight }, 100);
};


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ