我使用Webbrowser控件填充网站,问题是该网站包含两个下拉列表,并且它们彼此链接,如
<select name="dropdown1" id="dropdown1">
<option value="1"test1</option>
<option value="2"test2</option>
</select>
<select....>
<option value=""> </option>
</select>
如果我使用
Webbrowser1.document.getelementbyid("dropdown1").setattribute("Value", "1")
确实选择dropdownlist1的值1,但它没有激活下拉列表2,其中的选项属于第一个下拉列表中的选项
我得到它的唯一方法是用鼠标选择它并点击我的选项,但我希望它是自动的。我希望我已经告诉你了。
答案 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
函数以直接访问它。