3

Webbrowser コントロールを使用してサイトに入力します。問題は、サイトに 2 つのドロップダウンリストが含まれており、それらが次のように相互にリンクされていることです。

<select name="dropdown1" id="dropdown1">
<option value="1"test1</option>
<option value="2"test2</option>
</select>
<select....>
<option value="">&nbsp;</option>
</select>

私が使用する場合

Webbrowser1.document.getelementbyid("dropdown1").setattribute("Value", "1")

ドロップダウンリスト1の値1を選択しますが、最初のドロップダウンリストの選択肢に属するオプションでドロップダウンリスト2をアクティブにしません

私がそれを機能させる唯一の方法は、マウスで選択してオプションをクリックすることですが、自動にしたいです。十分にお知らせできたことを願っています。

4

1 に答える 1

0

WebbrowserWPF は悪名高いほど貧弱であり、それとの相互作用はそれほど良くありません。使用を避けることができる場合は、使用しないことを強くお勧めします。

いじる必要があるときは、通常、すべてのやり取りを JavaScript で行います。によって提供されるページに JavaScript 関数を設定しWebbrowser、WPF コードから呼び出します。このようにして、すべての DOM 対話は Web ページ自体によって行われます。

このシナリオでは、HTML は次のようになります。

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>

    <script type="text/javascript">
        function selectOption(param)
        {
            if (param == "value3") {
                var combo1 = document.getElementById("dropdown1");
                combo1.value = 3;
            }
        }

    </script>
</head>
<body>
    <form>
        <select name="dropdown1" id="dropdown1">
            <option value="1">test 1</option>
            <option value="2">test 2</option>
            <option value="3">test 3</option>
        </select>
        <select name="dropdown2" id="dropdown2">
            <option value="a">test a</option>
            <option value="b">test b</option>
        </select>
    </form>
</body>
</html>

XAML:

<Window x:Class="StackOverflowWorkbench.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <Button Click="Button_Click_1" Content="Click Me!" />
        <WebBrowser Name="MyBrowser" />
    </StackPanel>
</Window>

XAML.CS:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        MyBrowser.Navigate(Directory.GetCurrentDirectory() + "/HTMLPage1.html");
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        MyBrowser.InvokeScript("selectOption", new String[] { "value3" });
    }
}

サンプル コードは 2 番目のドロップダウンを変更していませんが、JavaScript から直接 DOM と対話しているため、簡単にアクセスできます。selectOptionたとえば、関数を拡張して直接アクセスすることができます。

于 2012-12-01T16:40:13.587 に答える