【问题标题】:Visual Basic - Select Dropdownlists optionVisual Basic - 选择下拉列表选项
【发布时间】:2012-11-19 14:09:32
【问题描述】:

我正在使用 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

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

【问题讨论】:

  • 第二个下拉列表没有得到任何 id?或名字?我猜它有一个像dropdown2这样的名字。所以你只需要添加与另一个ID相同的代码。 Webbrowser1.document.getelementbyid("dropdown2").setattribute("Value", "1")
  • @samy 是的,第二个下拉列表也有一个类似 dropdown2 的 id,但如果单击第一个下拉列表,则该列表中只有选项,我无法自动执行此操作。如果你使用你告诉我的代码,它不会起作用,因为没有 value1
  • 这是一个猜测!你说只有当你点击第一个下拉列表时才有效。所以你可以像这样调用 click 方法:Webbrowser1.document.getelementbyid("dropdown1").InvokeMember("click"); 或尝试Webbrowser1.Document.GetElementById("dropdown1").Focus();
  • 非常感谢,您的回答并不完全正确,但它给了我很好的方向。现在我有 (WebBrowser1.Document.GetElementById("dropdown1").SetAttribute("Value", "1") WebBrowser1.Document.GetElementById("dropdown1").Focus() SendKeys.Send("{DOWN}") SendKeys .Send("{Up}") 并且有效:D

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


【解决方案1】:

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 函数以直接访问它。

【讨论】:

  • 非常感谢您抽出宝贵的时间来回答我的问题,但是这种方法对我来说是一种新方法,而且我在 html 中非常好,但在 java 和 C# 中不太好,所以我如何在我的视觉基本形式?编辑:我要填写的网站不是我的
  • 啊...使用无法编辑的 HTML 站点不允许您使用此方法。我将不得不更多地研究它。
猜你喜欢
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多