none
Capturar Link RRS feed

  • Pergunta

  • Opa galera. Minha duvida é seguinte preciso ler uma pagina web aberta no webbrowser e capturar o link dela.

    Exemplo de html da pagina

    Link para pagina: 
    www.exemplo.com

    Html da pagina:
    <html>
    <head><title>Exemplo de Pagina Web</title></head> <body> <iframe src="www.google.com"></iframe> </body></html>

    Ler o html da pagina e pegar o link www.google.com
    Tenho que pegar tudo que estiver entre " " do src
    domingo, 29 de janeiro de 2012 05:16

Respostas

  • Egon segue exemplo da sugestão que fiz acima, veja.

    Download do HtmlAgilityPack:
    http://htmlagilitypack.codeplex.com/ 

    Resultado:


    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using HtmlAgilityPack;
    using System.Net;
    using System.IO;
    
    namespace WebApplication1
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
                string html = DownloadWebPage("http://g1.globo.com/");
    
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(html);
                var resu = doc.
                    DocumentNode.
                    SelectNodes("//a/@href | //img/@src | //iframe/@src").
                    Select(f => new
                    {
                        Name = f.Name,
                        Link = f.Attributes["href"] != null ? f.Attributes["href"].Value :
                                   f.Attributes["src"].Value != null ? f.Attributes["src"].Value :
                                       f.Attributes["iframe"].Value != null ? f.Attributes["iframe"].Value : "Nenhum link"
                    }
                    ).ToList();
            }
    
            public string DownloadWebPage(string Url)
            {
                // Open a connection
                HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(Url);
    
                // You can also specify additional header values like 
                // the user agent or the referer:
                //WebRequestObject.UserAgent = ".NET Framework/2.0";
                //WebRequestObject.Referer = "http://www.example.com/";
    
                // Request response:
                WebResponse Response = WebRequestObject.GetResponse();
    
                // Open data stream:
                Stream WebStream = Response.GetResponseStream();
    
                // Create reader object:
                StreamReader Reader = new StreamReader(WebStream);
    
                // Read the entire stream content:
                string PageContent = Reader.ReadToEnd();
    
                // Cleanup
                Reader.Close();
                WebStream.Close();
                Response.Close();
    
                return PageContent;
            }
        }
    }
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    • Sugerido como Resposta Vitor dos Santos terça-feira, 31 de janeiro de 2012 17:13
    • Marcado como Resposta Egon Freire quarta-feira, 1 de fevereiro de 2012 18:32
    terça-feira, 31 de janeiro de 2012 16:55
  • Você pode usar uma expressão regular.

     

    Regex re = new Regex("<iframe src=\"(.*)\">");
    
                Match m = re.Match("<html>"
                                   +"<head><title>Exemplo de Pagina Web</title></head>"
                                   +"<body>"
                                   + "<iframe src=\"www.google.com\"></iframe>"
                                   + "</body></html>");
    
                MessageBox.Show(m.Groups[1].ToString());

    • Editado Vitor dos Santos segunda-feira, 30 de janeiro de 2012 01:01
    • Marcado como Resposta Egon Freire quarta-feira, 1 de fevereiro de 2012 18:32
    segunda-feira, 30 de janeiro de 2012 00:58

Todas as Respostas

    • Marcado como Resposta Egon Freire segunda-feira, 30 de janeiro de 2012 00:07
    • Não Marcado como Resposta Egon Freire segunda-feira, 30 de janeiro de 2012 00:11
    domingo, 29 de janeiro de 2012 11:58
  • Como não entendi direito fiz de uma outra maneira.

    Ele pega o id e depois busca pelo atribute src e então pega o link. Porem se o iframe não contem id fica difcil, teria alguma maneira de pegar este atributo src sem precisar definir um id. Da maneira que sugeri antes só sem o id.

    segunda-feira, 30 de janeiro de 2012 00:11
  • Você pode usar uma expressão regular.

     

    Regex re = new Regex("<iframe src=\"(.*)\">");
    
                Match m = re.Match("<html>"
                                   +"<head><title>Exemplo de Pagina Web</title></head>"
                                   +"<body>"
                                   + "<iframe src=\"www.google.com\"></iframe>"
                                   + "</body></html>");
    
                MessageBox.Show(m.Groups[1].ToString());

    • Editado Vitor dos Santos segunda-feira, 30 de janeiro de 2012 01:01
    • Marcado como Resposta Egon Freire quarta-feira, 1 de fevereiro de 2012 18:32
    segunda-feira, 30 de janeiro de 2012 00:58
  • De grande ajuda seu code. Como tentei fazer. Só que ele me passa o code html dá pagina toda ao inves de só o link dentro de src.

    string content = new WebClient().DownloadString(wb.Url.ToString());
    string contentlink = Regex.Replace(content, "<iframe src=\"(.*)\">",string.Empty);

    textBox2.Text = contentlink;

     

    segunda-feira, 30 de janeiro de 2012 01:45
  • Não,não é como você tentou fazer.
    segunda-feira, 30 de janeiro de 2012 01:51
  • Preciso pegar o html de uma pagina. Ler o valor que está em src. No seu exemplo o html já está no aplicativo.

    Tentei da seguinte maneira porem sem sucesso.

    string content = new WebClient().DownloadString(wb.Url.ToString());
    string contentbusca = "<iframe src=\"(.*)\">";
    Regex r = new Regex(contentbusca, RegexOptions.IgnoreCase);
    Match m = r.Match(content);
    textBox2.Text = m.Groups[1].ToString();

    segunda-feira, 30 de janeiro de 2012 02:28
  • Sim preciso obter e depois ler e pegar só o valor que estiver em src
    segunda-feira, 30 de janeiro de 2012 02:44
  • Veja o link que indiquei acima
    segunda-feira, 30 de janeiro de 2012 02:47
  • Egon você pode usar o HtmlAgilityPack para trabalhar com LINQ e recuperar valores de pagina HTML, veja este thread, talvez se você adaptar de certo:

    http://social.msdn.microsoft.com/Forums/pt-BR/504/thread/4d24d7ee-c31b-4e37-84ba-721257d2e0dd  
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    segunda-feira, 30 de janeiro de 2012 11:26
  • Fiz com base no seu exemplo e não deu certo.

    string content = wb.DocumentText;
    Regex re = new Regex("<iframe src=\"(.*)\">");
    Match m = re.Match(content);
    MessageBox.Show(m.Groups[1].ToString());

    segunda-feira, 30 de janeiro de 2012 12:05
  • Boa tarde.

    Voce pode usar jQuery para recuperar o valor de qualquer elemento html de sua página.

    Segue link:

    http://jquery.com/


    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    segunda-feira, 30 de janeiro de 2012 15:14
  • Duvida somente aqui. Minha a iframe é a seguinte.

    <iframe id="iframe" src="www.exemplo" marginheight="0" marginwidth="0" align="bottom" frameborder="0" scrolling="no"></iframe>

    Regex re = new Regex("<iframe src=\"(.*)\"");

    Só que ele não pega só o link. Ele vai ate.

    www.exemplo" marginheight="0" marginwidth="0" align="bottom" frameborder="0" scrolling="no

    Preciso que pare no link

    www.exemplo
    terça-feira, 31 de janeiro de 2012 10:31
  • string s = ("<iframe id=\"iframe\" src=\"www.exemplo.com\" marginheight=\"0\" marginwidth=\"0\" align=\"bottom\" frameborder=\"0\" scrolling=\"no\"></iframe>");
    string[] t = s.Substring(s.IndexOf("src=\"")).Split(new string[] { "\"" }, StringSplitOptions.RemoveEmptyEntries);
    
    Console.WriteLine(t[1]);
    

    terça-feira, 31 de janeiro de 2012 15:23
  • Ainda continua pegando a linha inteira não só o link.
    terça-feira, 31 de janeiro de 2012 15:50
  • Egon segue exemplo da sugestão que fiz acima, veja.

    Download do HtmlAgilityPack:
    http://htmlagilitypack.codeplex.com/ 

    Resultado:


    Código:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using HtmlAgilityPack;
    using System.Net;
    using System.IO;
    
    namespace WebApplication1
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
                string html = DownloadWebPage("http://g1.globo.com/");
    
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(html);
                var resu = doc.
                    DocumentNode.
                    SelectNodes("//a/@href | //img/@src | //iframe/@src").
                    Select(f => new
                    {
                        Name = f.Name,
                        Link = f.Attributes["href"] != null ? f.Attributes["href"].Value :
                                   f.Attributes["src"].Value != null ? f.Attributes["src"].Value :
                                       f.Attributes["iframe"].Value != null ? f.Attributes["iframe"].Value : "Nenhum link"
                    }
                    ).ToList();
            }
    
            public string DownloadWebPage(string Url)
            {
                // Open a connection
                HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(Url);
    
                // You can also specify additional header values like 
                // the user agent or the referer:
                //WebRequestObject.UserAgent = ".NET Framework/2.0";
                //WebRequestObject.Referer = "http://www.example.com/";
    
                // Request response:
                WebResponse Response = WebRequestObject.GetResponse();
    
                // Open data stream:
                Stream WebStream = Response.GetResponseStream();
    
                // Create reader object:
                StreamReader Reader = new StreamReader(WebStream);
    
                // Read the entire stream content:
                string PageContent = Reader.ReadToEnd();
    
                // Cleanup
                Reader.Close();
                WebStream.Close();
                Response.Close();
    
                return PageContent;
            }
        }
    }
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    • Sugerido como Resposta Vitor dos Santos terça-feira, 31 de janeiro de 2012 17:13
    • Marcado como Resposta Egon Freire quarta-feira, 1 de fevereiro de 2012 18:32
    terça-feira, 31 de janeiro de 2012 16:55
  • Com este code daria para ler o que o html de uma pagina aberta no webbrowser e pegar o link que está em iframe e navegar nele ? Se sim, Teria como me explicar melhor o code pois não entendi direito sou novo nisso. Valeu

    • Editado Egon Freire terça-feira, 31 de janeiro de 2012 18:35
    terça-feira, 31 de janeiro de 2012 18:35
  • Com este code daria para ler o que o html de uma pagina aberta no webbrowser e pegar o link que está em iframe e navegar nele ? Se sim, Teria como me explicar melhor o code pois não entendi direito sou novo nisso. Valeu

    Bom vamos la, o código acima utilizar do HtmlAgilityPack para fazemos uma consulta no html que o método DownloadWebPage() retorna para nós através do LINQ.

    No caso esta linha:
    .SelectNodes("//a/@href | //img/@src | //iframe/@src").
    
    Vai nos retornar todos os elementos HTML citado acima e seus atributos, no caso href e src.

    Logo em seguida foi utilizado do método Select() e criamos um tipo anonimos para guarda o tipo do elemento HTMl e seu respectivo, utilize de if (condição ? sim : não) para pegar os links.

    Teste este código acima com alguma pagina que contenha iframe e veja se funciona, boa sorte. 

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 31 de janeiro de 2012 19:34
  • Desculpe, mais ainda não entendi muito direito. E tambem como obter os links.

    Estou tentando usar para ele pegar a url do webbrowser. Então baixa a pagina, lê e então procura o link que está no iframe, e apos isso pega este link e faz o webbrowser abrir ele.

    Consegui da maneira anterior e mudando na pagina web.

    Code:

    string content = wb.DocumentText.ToString();
    Regex re = new Regex("<iframe src='(.*)'");
    Match m = re.Match(content);

    Então é preciso que o iframe estejá assim.

    <iframe src='www.exemplo.com' marginheight="0" marginwidth="0" align="bottom" frameborder="0"  height="500" width="500"></iframe>

    Com uma aspa só então ele para já com aspas dupla vai ate a ultima aspas dupla da linha.

    Outra duvida

    Como uso no webbrowser_DocumenteCompleted

    Como fazer o comando para ler o url que está no webbrowser, então se ele for qualquer outra url que não sejá: www.exemplo.com , Ele executar tal comando. E se for: www.exemplo.com , não fazer nada. Pois sempre a url começa sendo e depois é mudada.


    • Editado Egon Freire quarta-feira, 1 de fevereiro de 2012 09:21
    terça-feira, 31 de janeiro de 2012 23:42
  • Ai que vem a questão e se Houver mais de uma ( iframe ) qual entrar?

    ID: ~[L]ord
    Trabalho na:Umbrella Corporation
    Moro em: Raccoon city
    Frase: A vida é apenas mais um exemplo de má programação.
    =========================================
    | -Se a resposta for util,por favor, marque-me como resposta.
    | -Se esta sugestão for útil, por favor, classifique-a como útil.
    =========================================
    Leia-me: Organize o forum, marque as respostas & agradeça!

    sábado, 2 de junho de 2012 19:16