http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3266|回复: 3

[其他] 为什么调用InvokeMember 程序直接调用了IE打开了呢

[复制链接]
发表于 2014-1-6 02:04:29 | 显示全部楼层 |阅读模式
使用 webBrowser 控件来模拟点击网页上的链接,调用了INvokeMoember(click)方法,但好像不能在webbrowser浏览器打开。

为什么调用InvokeMember 程序直接调用了IE打开了呢

贴上代码希望管理员帮助一下

[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WebBrowser_控件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
         
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            string url = textBox1.Text;
            if (!url.Equals(string.Empty))
            {
                webBrowser1.Navigate(url);

            }
            else
            {
                MessageBox.Show("网址不为空!","输入错误提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        }
        private void DisplayMetaDescription()
        {
            if (webBrowser1.Document != null)
            {
                HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("a");
                foreach (HtmlElement elem in elems)
                {
                    String nameStr = elem.GetAttribute("href");
                    if (nameStr != null && nameStr.Length != 0)
                    {
                        String contentStr = elem.GetAttribute("content");
                        MessageBox.Show("Document: " + webBrowser1.Url.ToString() + "\nDescription: " + contentStr);
                    }
                }
            }
        }
        /// <summary>
        /// 查询页面链接地址,调用点击!
        /// </summary>
        /// <param name="url"></param>
        private void herfclick(string url)
        {
            //for (int i = 0; i < webBrowser1.Document.All.Count; i++)
            //{
            //    if (webBrowser1.Document.All[i].TagName == "a" && webBrowser1.Document.All[i].GetAttribute("href").ToString().Trim() == url)
            //    {
            //        webBrowser1.Document.All[i].InvokeMember("click");//引发”CLICK”事件
            //        break;
            //    }
            //}
            //获取一个HTML节点!
            HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("a");
            for (int i = 0; i < links.Count; i++)
            {
                if (links[i].GetAttribute("href").IndexOf("forum") > 0)
                {
                    links[i].InvokeMember("click");
                }
            }
            //遍历节点
            //foreach (HtmlElement link in links)
            //{
            //    //查找包含href节点
            //    string href = link.GetAttribute("href");
            //    if (href != null && href.Length != 0)
            //    {
            //        string u = link.GetAttribute("href");
            //        //过滤javascript链接,如果不包含就为真
            //        if (u.IndexOf("javascript")<0)
            //        {
            //            webBrowser1.Navigate(u);
            //            //Thread.Sleep(50000);
                        
            //        }
                    
            //    }
                
            //}
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //DisplayMetaDescription();
            string name = textBox2.Text;
            string pass = textBox3.Text;
            if (zhuantian())
            {
                HtmlElement username = webBrowser1.Document.All["username"];
                HtmlElement password = webBrowser1.Document.All["password"];
                HtmlElement forms = webBrowser1.Document.Forms["lsform"];
                HtmlElement btnAdd = webBrowser1.Document.GetElementById("addDiv").FirstChild;
                username.SetAttribute("value",name);
                password.SetAttribute("value",pass);
                forms.InvokeMember("submit");
                DisplayMetaDescription();

            }
           

        }
        private bool zhuantian()
        {
          bool zhuan = true ;
          return zhuan ;

        }
        
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            
            if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
            {
                zhuantian(); 
            }

        }

        private void button3_Click(object sender, EventArgs e)
        {
            string url = textBox1.Text;
            if (zhuantian())
            {

                herfclick(url);
            }
        }

        private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            string url = this.webBrowser1.StatusText;
            this.webBrowser1.Url = new Uri(url);
        }
    }
}



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-1-6 08:18:40 | 显示全部楼层
那可能是这个连接需要跳出,或者要在新的页面打开,你看看我的http://www.sufeinet.com/thread-3941-1-1.html文章 里有说明的,
 楼主| 发表于 2014-1-6 15:07:20 | 显示全部楼层
站长苏飞 发表于 2014-1-6 08:18
那可能是这个连接需要跳出,或者要在新的页面打开,你看看我的http://www.sufeinet.com/thread-3941-1-1.ht ...

手工在webborwers里点击是没有问题的,程序自动点击就会调用,您的那个贴我也看了,好像没有说到类似的情况呢。
发表于 2014-1-6 15:11:08 | 显示全部楼层
怎么没有,你设置不允许在新窗口中打开就行了,
你找找我里面肯定写的有,出现这问题就是因为你允许在新窗口中打开的原因
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-23 20:56

© 2014-2021

快速回复 返回顶部 返回列表