Telecharger WebBrowser et remplir BD

Signaler
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010
-
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
-
bonjour tous le monde.
Je code en vb.net ,mon logiciel permet de telecharger des données depuis un site web et remplir une table SQl.
Details:
j'ai une table de 6575 lignes remplis par les noms des ticker (a,b,c,d....)dans un premier j'ai chrager un combobox par ces tickers alors q'on je selection un le browser va etre charge depuis le site web et à condition du ticker selectioné (par exp je selectionne le ticker A le browser va charge depuis le site les données corespond au ticker A)et apres une liste va être charger par les données se trouvant dans la tag <td> depuis le webbrowser le travail de la liste box est de savoir le numero de la ligne des données nécessaire et à la fin je rempli ma table par les données que je veux.
Alors l'inconvenientde ce traitement est de permetre à l'utilisateur de choisir le ticker depuis le combobox,moi je veux que ça va être fait depuis la base de données C.A.d lister la table des tickers et charge le browser ticker par ticker et charger l'autre table par les infos de tous les tickers existe dans la tables des tickers.
c quelqu'un a ou un idée pour moi n'hesiter pas à m'aide.

18 réponses

Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
bonjour
ce que j'ai compris c'est que tu veux charger tout les tickets puis la liste correspondante à chaque ticket dans un table au début avant que l'utilisateur fait son choix ?
si c'est le cas peut tu nous montrer ton code afin que nous puissions t'aider ? et si c'est pas le cas peut tu mieux expliquer c que tu veut faire


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

je veux pas que l'utilisateur fait son choix je l'ai fait juste pour tester que tous passe bien. mais pour le moment je veux que tous passe sans le choix de l'utilisateur.
'charger le browser,
Dim cmdnb As New SqlCommand("select count(*) from asset11", cn)
Dim nbAsset As Integer = cmdnb.ExecuteScalar
For n As Integer = 0 To nbAsset - 1
Dim cmdSym As New SqlCommand("select ticker from Asset11 ", cn)
Dim symbol2 As String = GetData(cmdSym).Rows(n).Item(0)
WebBrowser1.Navigate("adresse d'une page dans un site web".Replace("#symbol#", symbol2))
je veux que la listebox box se charge par les données chargées ds le browser et a la fin remplir la bd.
mais le probleme ici est le chargement du browser ticker par ticker la fenetre d'execution se bloque .
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
hum
voila c'est mieux expliquer maintenant
ce que tu télécharge avec ton webbrowser est un fichier ou u prend un texte de la page exécuter ?
parce que tu peut utiliser d'autre façons pour télécharger sans faire buger l'application, comme avec une socket ou inet.
sinon pour le webbrowser à quel événement il enregistre les données et passe à l'autre téléchargement ? (plus de code nous sera surement utile)


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

consulter ça et tu va compr ce que je veux :http://www.finviz.com/quote.ashx?t=A
essayer de change la valeur du t parexp fait t=aa ou aacc mois je veux que ce browser chargé par tous les ticker(A=ticker)et je vais rexplique
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
mon ami je voudrais bien t'aider mais tu me fourni pas assez d'explication, la page contient un graph et un rapport, tu veut le texte ou la graph ?
sinon tu ma pas répondu à cette question : "le webbrowser à quel événement il enregistre les données et passe à l'autre téléchargement ?"


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
tu peut tout automatiser sans faire bloqué ton application, et aussi montre ton code qu'on puisse t'aider au moin

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
si ton programme bloque c'est parce qu'il charge plusieurs pages successivement, pour ce la tu peut utiliser plusieurs socket / inet / webbrowser en chargeant plusieurs "clones" si tu veut que le résultat soit rapide.


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

le code Complet

Dim nbAsset As Integer = cmdnb.ExecuteScalar
For n As Integer = 0 To nbAsset - 1
Dim cmdSym As New SqlCommand("select ticker from Asset11 ", cn)
Dim symbol2 As String = GetData(cmdSym).Rows(n).Item(0)
WebBrowser1.Navigate("http://www.finviz.com/quote.ashx?t=#symbol#".Replace("#symbol#", symbol2))
'*********charger la lsitbox********
ListBox1.Items.Clear()
Dim htElement As HtmlElement
'extraire les données qui se trouve dans le tag td depuis le browser
Dim htmlcollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("td")
On Error Resume Next
For Each htElement In htmlcollection
'charger la listbox par les données existant dans le tag td
ListBox1.Items.Add(htElement.InnerText)
Next
''Remplir la BD
refSite = 3
cmd = New SqlCommand("insert into fondamentals(TICKER, SOURCE_REF, LATEST_CLOSE_PRICE,[W_LOW_PRICE_52/W_HIGH_PRICE_52], EPS, MARKET_CAP, FORWARD_PE_RATIOS, PRICE_SALES,PRICE_BOOK,DIVIDEND_YIELD,DIVIDEND_RATE, Quick_Ratio, Long_Term_Debt_to_Eq, Insider_Ownership, Insider_Transactions, Institutional_Ownership, Institutional_Transactions, Gross_Margin, Profit_Margin, Previous_Close,RETURN_ON_ASSETS_ROA,RETURN_ON_EQUITY_ROE,return_on_investment_ttm) VALUES('" _
& symbol2 & "'," & refSite & ", '" & latestClosePriceT & "','" & ListBox1.Items(103) & "','" _
& ListBox1.Items(39) & "','" & ListBox1.Items(47) & "','" & ListBox1.Items(49) & "','" & ListBox1.Items(73) & "','" & ListBox1.Items(85) & "','" & ListBox1.Items(119) & "','" & ListBox1.Items(107) & "','" & ListBox1.Items(121) & "','" & ListBox1.Items(157) & "','" _
& ListBox1.Items(41) & "','" & ListBox1.Items(53) & "','" & ListBox1.Items(65) & "','" & ListBox1.Items(77) & "','" & ListBox1.Items(125) & "','" & ListBox1.Items(149) & "','" & ListBox1.Items(153) & "','" & ListBox1.Items(89) & "','" & ListBox1.Items(101) & "','" & ListBox1.Items(113) & "')", cn)
cmd.ExecuteNonQuery()
Next
c tous pour vous explique
Merci
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
dabord je vois pas l'interet de replace dans cette ligne :
WebBrowser1.Navigate("http://www.finviz.com/quote.ashx?t=#symbol#".Replace("#symbol#", symbol2)) 

tu peut directement faire:
WebBrowser1.Navigate("http://www.finviz.com/quote.ashx?t=" & symbol2) 

puis avant de passer au remplissage tu attend que le webbrowser soit charger,si ce n'est pas le cas tu retourne la main à windows.
donc ton code doit ressembler à sa :

Dim nbAsset As Integer = cmdnb.ExecuteScalar
For n As Integer = 0 To nbAsset - 1
Dim cmdSym As New SqlCommand("select ticker from Asset11 ", cn)
Dim symbol2 As String = GetData(cmdSym).Rows(n).Item(0)
WebBrowser1.Navigate("http://www.finviz.com/quote.ashx?t=" & symbol2)
'si le chargement n'est pas complet
while webbrowser1.state <> 4
'on retourne la main à Windows pour détecter les clic de souris et le clavier
doevents
wend
'*********charger la lsitbox********
ListBox1.Items.Clear()
Dim htElement As HtmlElement
'extraire les données qui se trouve dans le tag td depuis le browser
Dim htmlcollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("td")
On Error Resume Next
For Each htElement In htmlcollection
'charger la listbox par les données existant dans le tag td
ListBox1.Items.Add(htElement.InnerText)
Next
''Remplir la BD
refSite = 3
cmd = New SqlCommand("insert into fondamentals(TICKER, SOURCE_REF, LATEST_CLOSE_PRICE,[W_LOW_PRICE_52/W_HIGH_PRICE_52], EPS, MARKET_CAP, FORWARD_PE_RATIOS, PRICE_SALES,PRICE_BOOK,DIVIDEND_YIELD,DIVIDEND_RATE, Quick_Ratio, Long_Term_Debt_to_Eq, Insider_Ownership, Insider_Transactions, Institutional_Ownership, Institutional_Transactions, Gross_Margin, Profit_Margin, Previous_Close,RETURN_ON_ASSETS_ROA,RETURN_ON_EQUITY_ROE,return_on_investment_ttm) VALUES('" _
& symbol2 & "'," & refSite & ", '" & latestClosePriceT & "','" & ListBox1.Items(103) & "','" _
& ListBox1.Items(39) & "','" & ListBox1.Items(47) & "','" & ListBox1.Items(49) & "','" & ListBox1.Items(73) & "','" & ListBox1.Items(85) & "','" & ListBox1.Items(119) & "','" & ListBox1.Items(107) & "','" & ListBox1.Items(121) & "','" & ListBox1.Items(157) & "','" _
& ListBox1.Items(41) & "','" & ListBox1.Items(53) & "','" & ListBox1.Items(65) & "','" & ListBox1.Items(77) & "','" & ListBox1.Items(125) & "','" & ListBox1.Items(149) & "','" & ListBox1.Items(153) & "','" & ListBox1.Items(89) & "','" & ListBox1.Items(101) & "','" & ListBox1.Items(113) & "')", cn)
cmd.ExecuteNonQuery()
doevents
Next  






Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
j'espère que c'est ce que tu cherche


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

Merci je vais tester ces changement et si j'ai trouvé des problemes je vais te les declaré
Merci bien pour ton aide
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
de rien
et inchallah on résoudra tout les problèmes


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

Dim htmlcollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("td")
dans cette ligne il me leve l'exception suivante:
Object reference not set to an instance of an object.
Mais pas toujours,et quand le programme passe bien je trouve que rien est inséré dans la table.
tu peux m'aider à developper ce code ou propose moi une autre solution pour arrivé à mon besoin.Merci encore
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
oui pas de problème
donc le nombre de page que tu va exécuter est toujours fixe ou sa change ?
ta besoin de récupérer quel information de cette page ?



Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

les pages depondent de nombre de ticker(a,aacc,...)dans la BD pour l'instant est fix et par la suite il peut varie et ça depond du site web
par exp dans le site que j'etais données je veux extraire la valeur du champ:(Market cap=11.54B)c juste un exp ,je peux recuperer tous les valeurs existent dans le tableau qui contient Market cap.le logiciel que je suis entrain de developpez traite le domaine du finance.j'espére que j'etais clair.Merci
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

si je t'ai pas repondu, à demain inchalah.Merci
Messages postés
46
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
9 mars 2010

Bonjour Claiyah
Tu as une idée pour moi?
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
salam
je t'ai laisser un message privé regarde ta boite de réception



Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie (mon site)