bidfun Posted March 30, 2013 at 09:04 PM Report #500948 Posted March 30, 2013 at 09:04 PM (edited) 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> Edited March 31, 2013 at 03:01 PM by bidfun
bidfun Posted March 31, 2013 at 01:03 PM Author Report #500999 Posted March 31, 2013 at 01:03 PM 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
thoga31 Posted March 31, 2013 at 02:30 PM Report #501007 Posted March 31, 2013 at 02:30 PM (edited) 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 Edited March 31, 2013 at 02:33 PM by thoga31 Knowledge is free!
bidfun Posted March 31, 2013 at 03:07 PM Author Report #501008 Posted March 31, 2013 at 03:07 PM 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
bidfun Posted April 5, 2013 at 10:30 AM Author Report #501775 Posted April 5, 2013 at 10:30 AM 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
ribeiro55 Posted April 5, 2013 at 11:47 AM Report #501789 Posted April 5, 2013 at 11:47 AM 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"
bidfun Posted April 8, 2013 at 10:50 PM Author Report #502255 Posted April 8, 2013 at 10:50 PM (edited) 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 já 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 Edited April 8, 2013 at 11:05 PM by bidfun
ribeiro55 Posted April 9, 2013 at 10:26 AM Report #502307 Posted April 9, 2013 at 10:26 AM 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"
bidfun Posted April 10, 2013 at 01:40 AM Author Report #502447 Posted April 10, 2013 at 01:40 AM 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?
ribeiro55 Posted April 10, 2013 at 10:02 AM Report #502478 Posted April 10, 2013 at 10:02 AM 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"
bidfun Posted April 16, 2013 at 11:20 PM Author Report #503496 Posted April 16, 2013 at 11:20 PM (edited) 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. Edited April 16, 2013 at 11:36 PM by bidfun
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now