Visual Basic - 选择“下拉列表”选项

时间:2012-12-01 15:13:25

标签: c# drop-down-menu browser controls

我使用Webbrowser控件填充网站,问题是该网站包含两个下拉列表,并且它们彼此链接,如

<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")

确实选择dropdownlist1的值1,但它没有激活下拉列表2,其中的选项属于第一个下拉列表中的选项

我得到它的唯一方法是用鼠标选择它并点击我的选项,但我希望它是自动的。我希望我已经告诉你了。

1 个答案:

答案 0 :(得分:0)

Webbrowser WPF是出了名的穷人,与它的互动并不是更好。如果你可以避免使用它,我强烈建议你避免使用它。

当我不得不使用它时,我通常会通过JavaScript进行所有交互。我将在Webbrowser提供的页面上设置JavaScript函数,并从WPF代码中调用它。这样,所有DOM交互都由网页本身完成。

在这种情况下,您将使用类似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" });
    }
}

示例代码仍然不会更改第二个下拉列表,但由于您现在可以直接从JavaScript与DOM进行交互,因此您可以轻松访问它。例如,您可以扩展selectOption函数以直接访问它。