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]);
    }

    成功搞定!

  • 相关阅读:
    Shooting Algorithm
    Subgradient Algorithm
    Factorization Machine
    支持向量机
    Hashing Trick
    Science上发表的超赞聚类算法
    Contractive Auto-Encoder
    Shell之数学计算
    牛顿方法(Newton-Raphson Method)
    泊松回归(Poisson Regression)
  • 原文地址:https://www.cnblogs.com/icyJ/p/3803758.html
Copyright © 2011-2022 走看看