Bonjour,
En devellopant une petite application je me heurte à un problème assez bizarre.
Mon application doit chercher le contenu d'une page web sur un site web pour en extraire des informations. Cependant la source que je telecharge est différente de celle que je souhaite.
Ceci n'est pas très clair mais je vais tenter de m'expliquer.
Je tente d'obtenir la source de cette page par exemple:
http://eu.wowarmory.com/character-sh...derfist&n=Deer
Lorsque j'affiche la source (clic droit -> afficher source) avec n'importe quel navigateur internet ou même un petit navigateur fais en C# à l'aide d'un controleur de type WebBrowser j'obtient un beau fichier xml comme celui ci:
Et c'est ça que je souhaite récupérer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?><page globalSearch="1" lang="fr_fr" requestUrl="/character-sheet.xml"> <characterInfo> <character battleGroup="Misery" charUrl="r=Boulderfist&n=Deer" class="Druide" classId="11" faction="Horde" factionId="1" gender="(M)" genderId="0" guildName="Revelations" guildUrl="r=Boulderfist&n=Revelations&p=1" lastModified="24 mai 2008" level="70" name="Deer" prefix="" race="Tauren" raceId="6" realm="Boulderfist" suffix=""> <arenaTeams> <arenaTeam battleGroup="Misery" faction="Horde" factionId="1" gamesPlayed="4" gamesWon="0" lastSeasonRanking="0" name="Point Takers" ranking="0" rating="1445" realm="Boulderfist" realmUrl="b=Misery&r=Boulderfist&ts=2&t=Point+Takers&ff=realm&fv=Boulderfist&select=Point+Takers" seasonGamesPlayed="4" seasonGamesWon="0" size="2" url="r=Boulderfist&ts=2&t=Point+Takers&select=Point+Takers"> <emblem background="ff000000" borderColor="ffebede7" borderStyle="5" iconColor="ff7b807a" iconStyle="39"/> <members> <character battleGroup="" charUrl="r=Boulderfist&n=Zulan" class="Chasseur" classId="3" contribution="1459" gamesPlayed="0" gamesWon="0" gender="(M)" genderId="0" guild="Revelation" guildId="355378" guildUrl="r=Boulderfist&n=Revelation&p=1" name="Zulan" race="Troll" raceId="8" seasonGamesPlayed="3" seasonGamesWon="0" teamRank="0"/> <character battleGroup="" charUrl="r=Boulderfist&n=Deer" class="Druide" classId="11" contribution="1445" gamesPlayed="0" gamesWon="0" gender="(M)" genderId="0" guild="Revelations" guildId="355788" guildUrl="r=Boulderfist&n=Revelations&p=1" name="Deer" race="Tauren" raceId="6" seasonGamesPlayed="4" seasonGamesWon="0" teamRank="1"/> </members> </arenaTeam> </arenaTeams> </character> <characterTab> <talentSpec treeOne="0" treeThree="14" treeTwo="47"/> <buffs> <spell effect="Augmente l'Armure de 340, les caractéristiques de 14 et les résistances de 25." icon="spell_nature_regeneration" name="Marque du fauve"/> <spell effect="Chaque attaque de mêlée a une chance de faire entrer le druide dans un état d'Idées claires." icon="spell_nature_crystalball" name="Augure de clarté"/> <spell effect="Inflige 25 points de dégâts de Nature aux attaquants." icon="spell_nature_thorns" name="Epines"/> </buffs> <debuffs/> <pvp> <lifetimehonorablekills value="888"/> <arenacurrency value="248"/> </pvp> <professions> <skill key="alchemy" max="375" name="Alchimie" value="371"/> <skill key="herbalism" max="375" name="Herboristerie" value="390"/> </professions> <title value=""/> <knownTitles/> <characterBars> <health effective="9517"/> <secondBar casting="28" effective="4700" notCasting="94" type="m"/> </characterBars> <baseStats> <strength attack="542" base="83" block="-1" effective="281"/> <agility armor="892" attack="-1" base="66" critHitPercent="18.80" effective="446"/> <stamina base="87" effective="563" health="5450" petBonus="-1"/> <intellect base="142" critHitPercent="4.03" effective="174" mana="2330" petBonus="-1"/> <spirit base="139" effective="153" healthRegen="13" manaRegen="94"/> <armor base="3819" effective="4159" percent="28.26" petBonus="-1"/> </baseStats> <resistances> <arcane petBonus="-1" value="25"/> <fire petBonus="-1" value="25"/> <frost petBonus="-1" value="25"/> <holy petBonus="-1" value="0"/> <nature petBonus="-1" value="35"/> <shadow petBonus="-1" value="25"/> </resistances> <melee> <mainHandDamage dps="149.9" max="516" min="384" percent="0" speed="3.00"/> <offHandDamage dps="39.7" max="80" min="79" percent="0" speed="2.00"/> <mainHandSpeed hastePercent="0.00" hasteRating="0" value="3.00"/> <offHandSpeed hastePercent="0.00" hasteRating="0" value="2.00"/> <power base="542" effective="1104" increasedDps="78.0"/> <hitRating increasedHitPercent="8.88" value="140"/> <critChance percent="14.32" plusPercent="1.36" rating="30"/> <expertise additional="3" percent="0.75" rating="15" value="3"/> </melee> <ranged> <weaponSkill rating="0" value="-1"/> <damage dps="0.0" max="0" min="0" percent="0" speed="0.00"/> <speed hastePercent="0.00" hasteRating="0" value="0.00"/> <power base="436" effective="998" increasedDps="71.0" petAttack="-1.00" petSpell="-1.00"/> <hitRating increasedHitPercent="8.88" value="140"/> <critChance percent="6.20" plusPercent="1.36" rating="30"/> </ranged> <spell> <bonusDamage> <arcane value="10"/> <fire value="10"/> <frost value="10"/> <holy value="10"/> <nature value="10"/> <shadow value="10"/> <petBonus attack="-1" damage="-1" fromType=""/> </bonusDamage> <bonusHealing value="29"/> <hitRating increasedHitPercent="0.00" value="0"/> <critChance rating="0"> <arcane percent="4.03"/> <fire percent="4.03"/> <frost percent="4.03"/> <holy percent="4.03"/> <nature percent="4.03"/> <shadow percent="4.03"/> </critChance> <penetration value="0"/> <manaRegen casting="28.00" notCasting="94.00"/> </spell> <defenses> <armor base="3819" effective="4159" percent="28.26" petBonus="-1"/> <defense decreasePercent="0.00" increasePercent="0.00" plusDefense="0" rating="0" value="350.00"/> <dodge increasePercent="1.37" percent="29.83" rating="26"/> <parry increasePercent="0.00" percent="0.00" rating="0"/> <block increasePercent="0.00" percent="0.00" rating="0"/> <resilience damagePercent="2.03" hitPercent="1.01" value="40.00"/> </defenses> <items> <item durability="62" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_helmet_58" id="28732" maxDurability="70" permanentenchant="3003" randomPropertiesId="0" seed="1155483397" slot="0"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_jewelry_necklace_06" id="28745" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="1892107758" slot="1"/> <item durability="59" gem0Id="30574" gem1Id="30601" gem2Id="0" icon="inv_shoulder_12" id="28129" maxDurability="70" permanentenchant="2841" randomPropertiesId="0" seed="0" slot="2"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_shirt_12" id="5107" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="1811607132" slot="3"/> <item durability="104" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_chest_leather_06" id="28601" maxDurability="120" permanentenchant="0" randomPropertiesId="0" seed="1935080682" slot="4"/> <item durability="31" gem0Id="24061" gem1Id="24061" gem2Id="0" icon="inv_belt_26" id="28750" maxDurability="40" permanentenchant="0" randomPropertiesId="0" seed="2010415147" slot="5"/> <item durability="64" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_pants_mail_21" id="28347" maxDurability="75" permanentenchant="0" randomPropertiesId="0" seed="0" slot="6"/> <item durability="51" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_boots_plate_06" id="30674" maxDurability="60" permanentenchant="2649" randomPropertiesId="0" seed="2119766306" slot="7"/> <item durability="35" gem0Id="24033" gem1Id="0" gem2Id="0" icon="inv_bracer_07" id="33893" maxDurability="40" permanentenchant="2647" randomPropertiesId="0" seed="0" slot="8"/> <item durability="33" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_gauntlets_28" id="30644" maxDurability="40" permanentenchant="684" randomPropertiesId="0" seed="1866756760" slot="9"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_jewelry_ring_47" id="28649" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="1149729701" slot="10"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_jewelry_ring_23" id="25811" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="855575667" slot="11"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_misc_armorkit_11" id="27920" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="0" slot="12"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_misc_stonetablet_11" id="25937" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="529031629" slot="13"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_misc_cape_10" id="28529" maxDurability="0" permanentenchant="368" randomPropertiesId="0" seed="1407346298" slot="14"/> <item durability="117" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_staff_56" id="29359" maxDurability="120" permanentenchant="2670" randomPropertiesId="0" seed="0" slot="15"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="spell_nature_spiritwolf" id="28064" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="2232152" slot="17"/> </items> </characterTab> </characterInfo> </page>
Cependant lorsque je télécharge la source grâce à certaine fonction c# comme:
ou grace aux classes WebRequest ou WebClient, j'obtient une autre source qui ressemble à ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 string a = "http://eu.wowarmory.com/character-sheet.xml?r=Boulderfist&n=Deer"; this.webBrowser1.Navigate(a); ... ... private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { this.textBox1.Text = this.webBrowser1.DocumentText;//On affiche le contenu de la source dans une textbox }
Ce listing continu sur 2000 lignes contre les 135 lignes du fichier précédent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"> <html> <head> <link href="favicon.ico" rel="shortcut icon"> <title>The World of Warcraft Armory</title> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> <meta content="The World of Warcraft Armory is a vast searchable database of information for World of Warcraft - taken straight from the real servers. It is the most comprehensive and up-to-date database on the characters, arena teams, guilds, items, dungeons, raids, bosses, and faction rewards of World of Warcraft in existence." name="description"> <script src="/shared/global/third-party/detection.js" type="text/javascript"></script> <style media="screen, projection" type="text/css"> @import "css/master.css"; @import "css/en_us/language.css"; </style> <script type="text/javascript"> // if (is_moz) { } else if (is_ie7) { document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/ie7.css" />'); } else if (is_ie6) { document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/ie.css" />'); try { document.execCommand("BackgroundImageCache", false, true); } catch(err) {} } else if (is_opera) { document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/opera.css" />'); } if (is_mac && !is_moz) { document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/opera-mac.css" />'); } if (is_safari && is_mac) { if (is_safari3) document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/safari3.css" />'); document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/safari.css" />'); } else if (is_safari) { document.write('<link rel="stylesheet" type="text/css" media="screen, projection" href="css/safari-pc.css" />'); } // </script> <div id="containerJavascript"></div> </head> <body> .... .... ....
Je n'arrive pas à comprendre pourquoi lorsque j'affiche la source via le navigateur j'obtient quelque chose de différent, et j'aimerai savoir si il existait une fonction qui me permettrai d'obtenir la source via le menu contextuelle du control WebBrowser.
Car j'imagine que la source de 2000 lignes téléchargée est là bonne et que la version largement raccourci en xml est une interprétation du navigateur ou control.
Je vous remercie d'avance si vous avez quelques éléments de réponse.
Bye
Partager