Usuário com melhor resposta
Como extrair valor de um elemento do webbrowser?

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.
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>
O "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
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.
-
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.
-
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>
O "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
-
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
-