zoukankan      html  css  js  c++  java
  • webbrowser获取无ID无Name控件并模拟点击

    常见的获取控件并点击(自动登录):

    var txtUserID = wbsTask.Document.All["userName"];
    var txtPsd = wbsTask.Document.All["password"];
    var txtVrf = wbsTask.Document.All["code"];var btnSubmit = wbsTask.Document.All["btnSubmit"];
    
    var code = ReadLoginVerifyCode();
    var userInfo = cboAccount.ComboBox.SelectedValue as UserInfo;
    if (userInfo == null) { MessageBox.Show("获取用户信息失败!"); return; }
    
    txtUserID.SetAttribute("value", userInfo.UserID);
    txtPsd.SetAttribute("value", userInfo.Password);
    txtVrf.SetAttribute("value", code);if (string.IsNullOrWhiteSpace(code)) return;
    btnSubmit.InvokeMember("click");//自动提交

    特殊需求:查找webbrowser页面上的一个无ID无Name的A控件,后台模拟点击事件。

    初始代码:

    var b = wbsTask.Document.Body.InnerText.Contains("XXX");
    if (!b) return false;
    foreach (HtmlElement he in wbsTask.Document.GetElementsByTagName("a"))
    {
        if (he.InnerText == "XXX")
        {
            he.InvokeMember("click");
        }
    }

    最后发现无法引发click事件,而a处的代码为:

    <a href="javascript:;" onclick="dialog(650,450,'zzz','../../dialog/sss.aspx?id=bbb');return false;" class="link_t">XXX</a>

    也就是说click事件调用了一个javasript函数。

    为毛没有执行he.InvokeMember("click")这句呢?我百思不得其解。附带说明,上面的代码是在documentComplete事件时调用的,所以页面加载已经完成。

    在网上搜寻解决方案,得几种提示

    提示一:html代码已经加载完毕,但js还没有加载完毕,解决方案timer一下。

    if (he.InnerText == "XXX")
    {
        new Action(() =>
        {
            System.Threading.Thread.Sleep(10000);
            new Action(() => he.InvokeMember("click")).InvokeRun(this);
        }).RunThread();
    }

    这里的InvokeRun(this)是多线程回调,RunThread新开线程执行代码。测试结果:无效--------.

    提示二:click变Click或onclick,无效。

    提示三:

    if (he.InnerText == "XXX")
    {
        wbsTask.Document.Focus();
        IHTMLElement nativeElement = he.DomElement as IHTMLElement;
        nativeElement.click();
    }

    测试结果:无效*-----

    最终解决方案:

    if (he.InnerText == "XXX")
    {
        var obj = he.DomElement;
        var mi = obj.GetType().GetMethod("click");
        mi.Invoke(obj, new object[0]);
    }

    成功搞定!

  • 相关阅读:
    Guid ToString 格式
    SQL Server 自增字段归零
    一些被触动的话
    【简易教程】在网站上养一只萌咔咔的小仓鼠
    SQL分页语句
    WPF使用System.Windows.SystemParameters类获得屏幕分辨率
    WPF编程学习——窗口
    C# .net WPF无边框移动窗体
    WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
    转 遗传算法简介
  • 原文地址:https://www.cnblogs.com/icyJ/p/3803758.html
Copyright © 2011-2022 走看看