none
Como extrair valor de um elemento do webbrowser? RRS feed

  • Pergunta

  • Olá

    Estou usando um webbrowser, onde carrego uma página e preciso extrair o valor de um botão:

    Este é o código contido no site, é um contador reversivo e eu gostaria de obter o valor do elemento "btn", apenas

    do número, ou seja do "+w+":

    var w=30;
    
    setInterval('PlzWait();',1000);
    
    function PlzWait() {
      if (w<0) exit;
    
      var btn_el=document.getElementById('btn');
    
      if (w==0) {
        btn_el.disabled=false;
        btn_el.value='DOWNLOAD';
      } else {
        btn_el.value='Aguarde '+w+' segundos';
      }
      w--;
    }

    Alguma ideia? Desde já agradeço.

    segunda-feira, 30 de novembro de 2015 12:23

Respostas

  • Eliseu, o valor de um elemento, "btn" é botão? Uma vez que você obtém o valor do controle ele será o valor escrito, completo. Como você sabe o que foi escrito, é só separar o número da String.

    Public Function ParseTempo(ByVal Texto As String) As String
        Return Texto.Replace("Aguarde ", "").Replace(" segundos", "")
    End Function

    Agora, a propriedade "InnerText" busca texto escrito entre as tags apenas. Então se o elemento for assim:

    <button id="btn">Meu Texto</button>

    O "InnerText" trará "Meu Texto". Se não, se o texto estiver em um atributo qualquer, você tem que ler o atributo. Imagine se for assim:

    <buttton id="btn" atributo="valor" value="1234"></button>

    "GetElementById(string)" retorna um HtmlElement. Ele tem os métodos de leitura e gravação dos atributos. Seria algo assim:

    Public Sub Teste()
        Dim Ele As HtmlElement = WebBrowser1.Document.GetElementById("btn")
        Dim Val As String = Ele.GetAttribute("nome_do_atributo")
        Val = ParseTempo(Val)
    End Sub


    • Marcado como Resposta Marcos SJ terça-feira, 1 de dezembro de 2015 13:36
    terça-feira, 1 de dezembro de 2015 13:01

Todas as Respostas

  • O WebBrower tem uma propriedade chamada "Document" que detém o documento HTML, e tem todos os comandos referentes a classe HtmlDocument. Métodos como "GetElementById(string)". Use-o para pegar o elemento, e ai tem métodos para definir/ler valor, atributo etc.
    • Marcado como Resposta Marcos SJ segunda-feira, 30 de novembro de 2015 13:04
    • Não Marcado como Resposta Eliseu5 segunda-feira, 30 de novembro de 2015 14:45
    segunda-feira, 30 de novembro de 2015 12:40
  • Olá

    Obrigado pela ajuda. Tentei:

      WebBrowser1.Document.GetElementById("btn").InnerText

    mas ele não consegue extrair, e se extraísse seria de todo o conteúdo ("Aguarde x segundos") do botão, e eu precisaria apenas do tempo (x segundos).

    Não consegui de outra maneira.

    segunda-feira, 30 de novembro de 2015 14:45
  • Eliseu, o valor de um elemento, "btn" é botão? Uma vez que você obtém o valor do controle ele será o valor escrito, completo. Como você sabe o que foi escrito, é só separar o número da String.

    Public Function ParseTempo(ByVal Texto As String) As String
        Return Texto.Replace("Aguarde ", "").Replace(" segundos", "")
    End Function

    Agora, a propriedade "InnerText" busca texto escrito entre as tags apenas. Então se o elemento for assim:

    <button id="btn">Meu Texto</button>

    O "InnerText" trará "Meu Texto". Se não, se o texto estiver em um atributo qualquer, você tem que ler o atributo. Imagine se for assim:

    <buttton id="btn" atributo="valor" value="1234"></button>

    "GetElementById(string)" retorna um HtmlElement. Ele tem os métodos de leitura e gravação dos atributos. Seria algo assim:

    Public Sub Teste()
        Dim Ele As HtmlElement = WebBrowser1.Document.GetElementById("btn")
        Dim Val As String = Ele.GetAttribute("nome_do_atributo")
        Val = ParseTempo(Val)
    End Sub


    • Marcado como Resposta Marcos SJ terça-feira, 1 de dezembro de 2015 13:36
    terça-feira, 1 de dezembro de 2015 13:01
  • Olá SammuelMiranda

    Obrigado pela ajuda. Obrigado mesmo. :)

    Consegui com seu exemplo, usando ".GetAttribute"

    Vlw. Abç


    • Editado Marcos SJ quarta-feira, 2 de dezembro de 2015 13:17 Edição
    terça-feira, 1 de dezembro de 2015 22:17
  • Que bom. Lembre-se de usar o "InnerText" quado for no exemplo que te dei, entre tags, se não não é "Inner" (interior), então só pode ser atributo... que bom que funcionou...
    quarta-feira, 2 de dezembro de 2015 12:15