物理类型点击Webbrowser网站组合框?

时间:2016-12-25 02:23:34

标签: c# winforms visual-studio webbrowser-control

我正在开发一个项目,通过编程从windows表单输入网站数据。我将面临与combobox物理鼠标/键盘点击事件相关的问题。

从3天开始谷歌搜索解决方案并测试多种组合,但没有成功。

项目:我的Windows窗体项目有一个webbrowser控制器,它会在其中加载一个远程网站。该网站上有2个组合框。首先在其中有默认选项值,但最初没有选择任何值。第二组合框数据取决于第一组合框选择值。初始第二个组合框中没有数据,一旦用户点击鼠标/键盘上的第一个组合框,然后第二个组合框加载数据(来自server / xml / java)。

问题:我已成功使用代码设置First combobox的值。但是我需要一个物理鼠标/键盘类型点击First combobox来获得第二个组合框的值。第二个组合框值可靠第一个组合框,最初第二个组合框没有任何价值。

我的工作: 这是网站代码(我为本地测试而创建的演示)。

<meta charset="utf-8" />
<!--<meta http-equiv="X-UA-Compatible" content="IE=edge" >-->
<meta http-equiv="X-UA-Compatible" content="IE=9" >
<title></title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="jquery.min.js" type="text/javascript"></script>
<script>

    $(document).ready(function () {

         ////////////////////////////////
        $("#myselectbox").change(function () {
            if ($("#myselectbox option:selected").attr("value") == "saab") {
                var numbers = [1, 2, 3, 4, 5];
                var option = '';
                for (var i = 0; i < numbers.length; i++) {
                    option += '<option value="' + numbers[i] + '">' + numbers[i] + '</option>';
                }
                $('#myselectbox2').append(option);`enter code here`
            }                
        });
        ///////////////////////////////////

    });
</script>
<style type="text/css">
    body {    
        margin-top: 0;
    margin-left: 0;

     }
</style>
<body>
<select id="myselectbox">
   <option value="volvo">Volvo</option>
   <option value="saab">Saab</option>
   <option value="mercedes">Mercedes</option>
   <option value="audi">Audi</option>
</select>
<br />
<select id="myselectbox2">
</select>
</body>

C#代码

webBrowser1.ScriptErrorsSuppressed = true;
string curDir = Directory.GetCurrentDirectory();
webBrowser1.Url = new Uri(String.Format("file:///{0}/myHTML/mainPage.html", curDir));

TEST1:此代码用于设置第一个组合框的值,并且更改在网站中可见,但不会触发鼠标/键盘上的单击。结果:第二个组合框没有价值。

private void button1_Click(object sender, EventArgs e)
    {
    webBrowser1.Document.GetElementById("myselectbox").SetAttribute("value", "saab");
}

TEST2:与TEST1相同的结果

private void button1_Click(object sender, EventArgs e)
    {
        var elements = webBrowser1.Document.GetElementsByTagName("select");


        foreach (HtmlElement element in elements)
        {

            if (element.GetAttribute("id") == "myselectbox")
            {
                element.GetElementsByTagName("option")[1].SetAttribute("selected", "selected");

                //webBrowser1.Document.GetElementById("myselectbox").InvokeMember("Click");
                //webBrowser1.Document.InvokeScript("__doPostBack");
                //webBrowser1.Document.GetElementById("myselectbox").RaiseEvent("onChange");

            }
        }


    }

TEST3:与TEST1相同的结果

 private void button1_Click(object sender, EventArgs e)
    {
        SendKeys.Send("{DOWN}");
        SendKeys.Send("{UP}");
        SendKeys.Send("{DOWN}");

}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        webBrowser1.Document.GetElementById("myselectbox").Focus();

    }

TEST4:没有运气

 private void button1_Click(object sender, EventArgs e)
    {
        foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("select"))
        {
            if (el.Id == "myselectbox")
            {
                foreach (HtmlElement comboItem in el.Children)
                {
                    Console.WriteLine(comboItem.InnerText + " " + comboItem.GetAttribute("Selected"));
                    if (comboItem.InnerText == "Saab")
                    {
                        comboItem.SetAttribute("selected", "true");
                        //            SendKeys.Send("\t");
                        SendKeys.Send("{Tab}");
                        SendKeys.Send("{ENTER}");
                    }
                }
            }

        }
}

TEST5:我可以看到调试结果,因为事件找到了元素但没有点击触发器。我期待结果可能是第一个组合框将打开选项,我可能能够使用sendkeys.send选项卡的值。但没有运气

 private void button1_Click(object sender, EventArgs e)
    {
        Point k = new Point(2,30);
        HtmlElement ele = webBrowser1.Document.GetElementFromPoint(k);
        ele.InvokeMember("click");
}

Result in debug

注意:我不知道第二个组合框获取数据的方式/位置。我正在使用firebug工具在实时网站上进行测试,然后发现第二个组合框数据来自服务器的xml文件。 我想要朝这个方向去获取第二个组合框的数据,因为在我用鼠标点击第一个组合框后,xml链接就会触发。

注意:将来的webbrowser控制器将从Windows窗体中隐藏。

任何类型的建议/代码/链接都会非常明显,非常感谢提前:)

0 个答案:

没有答案