3

我用 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

我让它工作的唯一方法是用鼠标选择它并单击我的选项,但我希望它是自动的。我希望我已经充分通知了你。

4

1 回答 1

0

WPF 是出了名的Webbrowser差,与它的交互也没有任何改善。如果您可以避免使用它,我强烈建议您避免使用它。

当我不得不处理它时,我通常通过 JavaScript 进行所有交互。我将在由 提供的页面上设置一个 JavaScript 函数,Webbrowser并从 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函数以直接访问它。

于 2012-12-01T16:40:13.587 回答