陈程的技术博客

  • 关于作者
全栈软件工程师
一个专注于技术研究创新的程序员
  1. 首页
  2. .NET
  3. 正文

关于使用webBrowser操作HTML的帮助类

2016年3月10日 574点热度 0人点赞 0条评论
webBrowser操作HTML,可以模拟点击,提交填写等,网页外挂利器,还可以做爬虫等,微软的webBrowser控件可谓强大。
using mshtml;
using System;
using System.Collections.Generic;
using System.Data;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace Insert
{
    /// <summary>
    /// 关于使用webBrowser操作HTML
    /// </summary>
    public class HTMLHelper
    {
        
        #region 取出Cookie
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);

        /// <summary>
        /// 取出Cookie,当登录后才能取 
        /// </summary>
        /// <param name="url">链接地址</param>
        /// <returns>cookie值</returns>
        public static string GetCookies(string url)
        {
            uint datasize = 1024;
            StringBuilder cookieData = new StringBuilder((int)datasize);

            if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x2000, IntPtr.Zero))
            {
                if (datasize < 0)
                    return null;
                
                cookieData = new StringBuilder((int)datasize);
                if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))
                    return null;
            }

            return cookieData.ToString();
        }
        #endregion
        
        #region 注入cookie
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

        /// <summary>
        ///  注入cookie到浏览器中
        /// </summary>
        /// <param name="path">链接地址</param>
        /// <param name="cookie">cookie值</param>
        ///  <param name="cookiename">cookie名称</param>
        public void WebBrowserControl(string path, string cookie, string cookiename = null)
        {
            if (cookiename == null)
                InternetSetCookie(path, "JSESSIONID", cookie);
            else
                InternetSetCookie(path, cookiename, cookie);
        }

        #endregion
        

        #region 设置HTML中指定id元素的值

        /// <summary>
        /// 设置HTML中指定id元素的值
        /// </summary>
        /// <param name="wb">WebBrowser</param>
        /// <param name="idName">id名称</param>
        /// <param name="value">设置的值</param>
        public void SetHtmlElementValue(WebBrowser wb, string idName, string value)
        {
            HtmlElement tbUserid = wb.Document.All[idName];
            tbUserid.SetAttribute("value", value);
        }
        #endregion
        
        #region 点击HTML中元素处理事件
        /// <summary>
        /// 点击HTML中元素处理事件
        /// </summary>
        /// <param name="wb">WebBrowser</param>
        /// <param name="idName">id名称</param>
        public void ClickElement(WebBrowser wb, string idName)
        {
            HtmlElement btnSubmit = wb.Document.All[idName];
            btnSubmit.InvokeMember("click");
        }
        
        #endregion
        
        #region 去掉弹出确认框
        /// <summary>
        /// 去掉弹出确认框 引用com +Microsoft HTML Object Library
        /// </summary>
        /// <param name="wb">WebBrowser</param>
        public void RemoveAlert(WebBrowser wb)
        {
            IHTMLWindow2 win = (IHTMLWindow2)wb.Document.Window.DomWindow;
            string s = @"function confirm() {";
            s += @"return true;";
            s += @"}";
            s += @"function alert() {}";
            win.execScript(s, "javascript");
        }
        #endregion

        
        #region 获取系统上Table的数据(未测)
        
        /// <summary>
        /// 获取系统上Table的数据
        /// </summary>
        /// <param name="wb">WebBrowser</param>
        /// <param name="dt">DataTable</param>
        /// <param name="TableIndex">页面上第几个Table</param>
        /// <returns></returns>
        public DataTable GetHTMLDataTable(WebBrowser wb, DataTable dt, int TableIndex)
        {
            HtmlElementCollection tbs = wb.Document.GetElementsByTagName("table");
            if (TableIndex > tbs.Count)
                return null;
            
            int count = 0;
            foreach (HtmlElement tb in tbs)
            {
                if (count < TableIndex - 1)
                {
                    count++;
                    continue;
                }

                HtmlElementCollection trs = tb.GetElementsByTagName("tr");

                foreach (HtmlElement tr in trs)
                {
                    HtmlElementCollection tds = tr.GetElementsByTagName("td");

                    if (tds.Count > 0)
                    {
                        DataRow dr = dt.NewRow();
                        for (int i = 0; i < tds.Count; i++)
                        {
                            dr[i] = tds[i].InnerText;
                        }

                        dt.Rows.Add(dr);

                    }
                }
            }
            return dt;
        }
        
        #endregion

    }
}

 

标签: C# winform
最后更新:2021年4月1日

博主

全栈工程师,侧重项目技术解决方案规划和开发

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

分类
  • .NET (65)
  • docker (3)
  • linux (12)
  • python (20)
  • web (14)
  • 小程序 (4)
  • 数据库 (2)
  • 未分类 (4)
  • 杂七杂八 (10)
标签聚合
python C# centos js winform nginx DevExpress linux
最新 热点 随机
最新 热点 随机
.NET开发手册标准参考 招募兼职前端开发 Centos安装dotnet6环境 VS上切换分支,vs编译运行出现bug,A fatal error was encountered彻底解决方案 用C#封装一个线程安全的缓存器,达到目标定时定量更新入库 C#通过特性的方式去校验指定数据是否为空
centos 运行php 用C#写基于用户的协同过滤算法,推荐网站上你可能感兴趣的人 nginx部署SSL证书和二级域名 DevExpress控件-使用ToolTipController控件 drools开源规则引擎部署方案-在centos的docker部署 3种读取word文档的方式优缺点

COPYRIGHT © 2021 陈程的技术博客. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS