在vb.net中搜索嵌入式网页源代码

时间:2014-12-09 16:55:01

标签: html vb.net

我编写了一个程序,其中包含一个嵌入式Web浏览器,该浏览器加载一个网站,该网站有一个不断变化的部分(该部分每周更改约2次而且没有常规的计时模式)我想搜索特定部分在指定的时间间隔刷新网页后打开网页源代码。

我发现很多类似于我的问题,但这就是我想要的,而这些问题没有:

  • 搜索嵌入式网页来源(他们在没有嵌入的情况下搜索网页,我不得不嵌入它,因为我必须在看到特定页面之前登录)

所以这是我正在尝试的程序:

  

1-在嵌入式网络浏览器中打开网站

     

2-用户登录后,在程序中按下按钮,它隐藏了嵌入式   Web浏览器并开始在一个时间间隔内刷新页面(如   每分钟)并搜索特定代码是否在源中更改   打开网页

任何其他/更好的想法赞赏

谢谢

2 个答案:

答案 0 :(得分:0)

很多年前,我写了一个应用程序,将几个页面的论坛帖子重新整合为一个,我也在努力解决登录问题,并认为只能使用嵌入式浏览器。事实证明,可以在.NET中使用System.Net来处理需要登录的网页,因为您可以将cookie拉出来并随身携带。我建议你这样做,远离嵌入式浏览器。

不幸的是我最初用C#编写代码,但由于它的.NET主要是​​基于类的,所以移植它不会太困难。

基本原则

在登录时找出POST中包含的信息,您可以在Chrome(开放模式)(F12)上执行此操作。将其转换为byteArray,将其发布到页面,存储cookie并稍后再使用cookie数据进行另一次调用。您需要一个类变量来保存cookie。

<强>代码:

private void Login()
    {
        byte[] byteArray = Encoding.UTF8.GetBytes("username=" + username + "&password=" + password + "&autologin=on&login=Log+in"); // Found by investigation

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("yourURL");
        request.AllowAutoRedirect = false;
        request.CookieContainer = new CookieContainer();
        request.Method = "POST";
        request.ContentLength = byteArray.Length;
        request.ContentType = "application/x-www-form-urlencoded";
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        WebResponse response = request.GetResponse();
        if (((HttpWebResponse)response).StatusCode == HttpStatusCode.Found)
        {
            // Well done, your login has been accepted
            loginDone = true;
            cookies = request.CookieContainer;
        }
        else
        {
            // If at first you don't succeed...
        }

        response.Close();
    }

private string GetResponseHTML(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.AllowAutoRedirect = false;

        // Add cookies from Login()
        request.CookieContainer = cookies; 

        request.ContentType = "application/x-www-form-urlencoded";
        WebResponse response = request.GetResponse();
        string sResponse = "";
        StreamReader reader = null;
        if (((HttpWebResponse)response).StatusCode == HttpStatusCode.OK)
        {
            reader = new StreamReader(response.GetResponseStream());
            sResponse = reader.ReadToEnd();
            reader.Close();
        }
        response.Close();

        return sResponse;
    }

希望有所帮助。

答案 1 :(得分:0)

我不得不换成C#,然后找到了我要找的东西:

string webPageSource = webBrowser1.DocumentText;

这给了我在 webBrowser1 控件中打开的网页源。