Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bidfun

[Resolvido] adquirir valores de vbscript.

Mensagens Recomendadas

bidfun

Editado:

Acrescento aqui alguns elementos que podem ajudar a obter ajuda:

1º - tenho um projecto criado em VB 2010, um form que de entre os vários elementos tem um webrowser

2º - objectivo retirar das páginas atributos (href, id, etc) e com os mesmos efectuar alguma operações.

3º - dificuldade não consigo obter os elementos dentro dos bocados de código em vbscript (exemplos abaixo) no html da página, ao ver o source (no chrome por exemplo) vejo que estes elementos são dinâmicos mediante o refresh da página, o que pretendia era importar parte deste código para o projecto VB 2010 à semelhança do que faço com os outros elementos do html.

Abaixo texto Original:

Boas,

Estou com dificuldades em transferir os atributos das partes em vbscript.

tenho um source em html que tem partes em vbscript que são dinamicos (alteram-se com o refresh) a minha questão é a seguinte como consigo sacar estes valores para usar em Visual Basic, à semelhança dos atributos com getelementbyid.

Anexo parte do vbscript

Parte 1 - Os valores à frente do .getTime()-????? são dinamicos (com refresh alteram-se), necessito destes valores para usar em BisualBasic.


<SCRIPT TYPE="text/javascript"><!--
var bid_time_offset=(new Date()).getTime()-1364674754*1000; var bid_items={}; var bid_robot; var bid_sync='Vérification...'; var bid_finished='Terminé!'; var bid_last_bids_item;

//-->
</SCRIPT>

Parte 2 - os valores são dinamicos (com refresh alteram-se), preciso do 'end_time' por exemplo para usar em Visual Basic, como saco estes valores do html? com getelementbyid não dá.

<SCRIPT TYPE="text/javascript"><!--
bid_add_items({
184877: { 'id': 184877, 'raw_amount': 4, 'amount': '€0.04', 'user': 'solracoswaldo', 'end_time': 1364675057, 'end_time_day': 'Aujourd\'hui', 'end_time_time': '21:24', 'status': 1, 'time': '30/03/2013 21:17:03', 'type': 'Automatique' }
}
); bid_last_bids_item=184877;

//-->
</SCRIPT>
Editado por bidfun

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bidfun

Mais uma vez fiquei com a sensação que o meu nível de conhecimentos é ofensivo para os utilizadores deste site.

Das várias vezes que aqui vim em busca de esclarecimentos ou senti que a minha ignorância era ofensiva, ou então que o esclarecimento que necessitava servia de base a uma discussão de génios que tinha um efeito amplificador nas minhas duvidas.

Como tal sugeria haver um moderador disponível para as duvidas de nível zero, menos desafiantes para os génios mas muito encorajadoras e úteis aos utilizadores newbies.

M/C

AP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Pelo que vi nos teus posts no P@P, das duas, uma: ou tens obtido respostas que até nem são complexas - além disso, se tiveres dúvida no que alguém te diz podes sempre perguntar -, ou então encontraste a solução que precisavas.

Ninguém se ofende com as questões de ninguém, podes tirar esses macaquinhos da cabeça. Lá porque ninguém te respondeu durante a madrugada não quer dizer que não há quem te queira ajudar.

Antes de fazer filmes, faz a ti mesmo a pergunta: "porque será que ainda ninguém me respondeu?"

Algumas respostas possíveis: é Páscoa, muito pessoal tem tradições na sua terra, como o "beijar da cruz" nas casas de familiares; é Domingo, dia de menos movimento no P@P; quem leu a pergunta não te consegue ajudar; colocaste a questão num fim-de-semana de festa às 22h da noite, e já estás a reclamar às 14h do dia seguinte - não somos morcegos nem vampiros para andar no P@P de madrugada, também precisamos de dormir.

O meu conselho é teres calma. Somos dezenas de membros activos aqui no P@P, mas nem todos sabem o mesmo, e nem todos podem ajudar em tudo. Tens de saber esperar que chegue aqui alguém que te possa ajudar.

E reforço que, quando alguém te disser alguma coisa que não entendas bem, não hesites em perguntar.

Por fim, não têm de ser os moderadores a responder às questões, são todos os membros. Os moderadores estão cá para moderar, entre outras tarefas, e todos os membros, Mods e não-Mods, estão cá para ajudar. Portanto, essa ideia de um Moderador para newbies não faz sentido já que essa não é a nossa função primária/única.

Acrescento apenas que não te posso ajudar na tua dúvida; não podia deixar de responder a um post dessa natureza. Mas podes ir dizendo para quem vier aqui e te saiba ajudar uma coisa: o que já tentaste fazer para isolar esses valores que tu queres? Onde está, em concreto, a tua dúvida? Ou é em todo o processo em si?

Cumprimentos,

thoga31

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bidfun

thoga31,

Obrigado pela resposta e boa Páscoa.

Editei o meu post inicial, dei mais alguns elementos sobre o que pretendo.

Até o que pretendo pode não ser possível sem a utilização do ajax, visto que os elementos que pretendo só actualizam mediante o refresh da página toda, mas se assim for não sei por onde começar.

M/C

AP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bidfun

Então não há ninguém que me possa ajudar neste assunto?

Ou será que a minha questão esta mal colocada ou não e clara?

M/C

AP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

A questão é clara. O tempo é que é escasso. A paciência é uma virtude :)

Para já, em vez de getelementbyid itera o getelementbytagname("script").

Quando conseguires apanhar os blocos de script, volta para passarmos à parte do parse.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bidfun

Boas,

Antes de mais os meus agradecimentos pela resposta, se bem entendi e com base nesta interpretação, procurei a forma de obter através do getelementbytagname e encontrei isso que passo a seguir, mas não consegui obter o texto dentro dos blocos em vbscript, no GetAttribute("type") em vez do type já coloquei, "value", "name", mas não sai nada da execução, com o "type" obtenho os óbvios "text/vbscript

Também consegui obter os href dos vários ficheiros .js, mas acho que a solução não passa por ai, parece-me (será...?) que é um destes ficheiros .js, o "upade.js" que cria e altera estes blocos em vbscript que coloquei no inicio deste post, dos quais quero sacar os elementos.


Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

	Dim PageElements As HtmlElementCollection = WebBrowser1.document.GetElementsByTagName("script")

	For Each CurElement As HtmlElement In PageElements
		Try
			TextBox2.Text = TextBox2.Text & CurElement.GetAttribute("type") & Environment.NewLine

		Catch ex As Exception
		End Try


	Next


End Sub

M/C

AP

Editado por bidfun

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

GetAttribute para que? Queres algum atributo, ou queres o "texto no interior" ?

Só tens de sacar o InnerText do elemento. O InnerText de um elemento script, caso não tenha um atributo src, vai ser o script em si. Quer seja vbs, js ou o que for.

Olha para o atributo apenas se quiseres sacar um tipo de script em específico.

AddHandler WebBrowser1.DocumentCompleted,
   Sub()
       For Each HE As HtmlElement In WebBrowser1.document.GetElementsByTagName("script")
           If Not HE.InnerHtml Is Nothing Then
               Stop 'temos script!
           End If
       Next
   End Sub
WebBrowser1.Navigate("http://www.sergioribeiro.com")

Depois disto podes apanhar o que precisas com parsings simples, a menos que valha a pena interpretar o script. Se for só para sacar uns valorzitos, parse é menos dispendioso.

Por exemplo, para o tal "end_time" que falas, podes apanhar da seguinte forma:

Dim S As String = HE.InnerHtml
If S.Contains("'end_time': ") Then
   Dim tmpInicio As Integer = S.IndexOf("'end_time': ") + "'end_time': ".Length
   MsgBox(S.Substring(tmpInicio, S.IndexOf(",", tmpInicio) - tmpInicio))
End If

Para experimentares, basta colocares este IF lá em cima onde tenho o "Stop".


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bidfun

Boas,

Boa Mestre !!!, já consigo sacar alguma coisa.

Para já deixa me ver como vou cortar o que me interessa, repetidamente (são valores dinâmicos, tempo em micro segundos)

Depois de cortar o que me interessa tenho de colocar um timer para repetir o ciclo, para os valores estarem sempre actualizados, será que estou no bom caminho?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não faço ideia se estás no bom caminho. Não sei o que pretendes no final :)

Agora tu, só saberás se estás no bom caminho se o começares a caminhar.

Qualquer dúvida, estamos por aqui ;)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bidfun

Sérgio Ribeiro,

Obrigado mestre pela ajuda, situação resolvida com,

[ code = vbnet ]

Dim sourceString As String = New System.Net.WebClient().DownloadString("http://??????????????")

[ /code ]

a um ficheiro update.js.

Obrigado.

Editado por bidfun

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.