Screen-scraping My Vodafone

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • TommyboyNL
  • Registratie: Januari 2006
  • Niet online
De afgelopen jaren heb ik dankbaar gebruik gemaakt van deze post bij het screen-scrapen van de My Vodafone site, om de hoogte en houdbaarheid van het beltegoed van een stapel UMTS dongels bij te houden. Deze gegevens werden Zabbix ingegooid wat mij automagisch waarschuwde als tegoeden te laag werden of zouden verlopen.
Begin deze maand heeft Vodafone echter haar webste "verbeterd", waardoor het tweede wget commando niet meer werkt: De AJAX inhoud wordt niet geladen.
Ik ben nu al een paar uur aan het kloten, maar krijg het zelf niet aan de praat.

Waar ik nu sta:
Ik wil de gegevens van de volgende pagina scrapen: https://my.vodafone.nl/my...d_en_verbruik/costcontrol (helaas een vodafone login nodig...)
Inloggen en een koekje krijgen gaat nog goed.

Wellicht ten overvloede: Het script draait op een Linux bak.

Daar staat het volgende stuk code dat volgens mij relevant is:
code:
1
2
3
4
5
6
7
8
9
10
11
<script>
    invokeAjaxRequest('BQ', 'es_my vodafone_tegoed en verbruik_costcontrol', 'BQ' );
</script>
<div id='portletBQ' >
    <div class='modBorder'>
        <div class='modHeader blueBG'><h2>Bezig met ophalen...</h2></div>
        <div class='modBody' style='text-align: center; color: #ffffff; margin-top: 20px; margin-bottom: 20px'>
            <img src='/wg20/ff2/img/ajax-loader.gif' />
        </div>
    </div>
</div>


Dit is ongetwijfeld ook relevant:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function invokeAjaxRequest(portletName, fromScreen, fromPortlet) {
var url = "/widget?widget=RenderPortletWidget&mimetype=text/html&_fs=" + fromScreen + "&_fp=" + fromPortlet;
jQuery.noConflict();
jQuery.ajax({
type: "GET",
url: url,
dataType: "text",
cache: false,
success: function(data) {
jQuery("#portlet" + portletName).html(data);
}
});
}


In Firefox krijg ik de volgende gegenereerde HTML:
code:
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
<script>
    invokeAjaxRequest('BQ', 'es_my vodafone_tegoed en verbruik_costcontrol', 'BQ' );
</script>
<div id="portletBQ"><div class="mod4Col">
<div class="modBorder">
<div class="modBody">
<div class="modCopy">
<div class="floatLeft">
<h2 class="h2Title">Tegoed &amp; verbruik voor <!-- key: myvodafone.pcecostcontrol.falcor.prepaid.portlettitle -->&nbsp;06-11344196</h2>
</div>
<div class="floatRight">
<h2 class="h2Title">Mei&nbsp;2013</h2>
</div>
<div class="clear">&nbsp;</div>
<div class="floatLeft blackTitle paddingtop">Jouw Prepaid-tarief:<!--? php echo ""; ?--><!-- key: myvodafone.pcecostcontrol.falcor.prepaid.subscription -->Mobiel internet op je Laptop</div>
<div class="floatRight textAlignRight paddingtop">
<a href="javascript:showAllowedPriceplans('/prive/my_vodafone/toestel_en_instellingen/Prepaid_Wijzigen/Priceplan_Wijzigen');" class="linkFalco"><span class="linkArrorPurble floatRight"></span>Prepaid-tarief wijzigen<!-- key: link.prepaid.pcecostcontrol.upgrade --></a>
</div>
<div class="clear">&nbsp;</div>
<div class="modFalcor">
<div class="falcTop">&nbsp;</div>
<div class="falcBorder">
<div class="modCopy2col floatLeft">
<p class="blackTitle bold">Nog te besteden<!-- key: myvodafone.pcecostcontrol.prepaid.falcor.main.title --></p>
<div class="floatLeft paddingtop">
<p class="darkGreen falcorTitle bold separator-right padMarginReset">€&nbsp;33,08</p>
</div>
<div class="floatLeft separator-left">
<a href="https://opwaarderen.vodafone.nl/VodafoneNLExternalWeb/SSO.do" class="buttonPurble"><span>Nu opwaarderen<!-- key: prepaid.blox.settings.upgraden.falcor.text --></span></a>
</div>
<div class="clear">&nbsp;</div>
<div style="padding-top:5px" class="grey">nog <!-- key: myvodafone.pcecostcontrol.prepaid.valid.falcor.credit -->239&nbsp;dagen bruikbaar t/m <!-- key: myvodafone.pcecostcontrol.prepaid.valid.falcor.credit2 -->15 <!-- key: myvodafone.pcecostcontrol.falcor.prepaidash1 -->Januari <!-- key: myvodafone.pcecostcontrol.falcor.prepaidash2 -->2014</div>
</div>
</div>
<div class="falcFooter">&nbsp;</div>
</div>
<div class="clear">&nbsp;</div>
<div class="clear">&nbsp;</div>
<div class="floatLeft blackTitle bold">Voordeelbundels<!-- key: header.prepaid.falcor.no.blox --></div>
<div class="floatRight paddingtop textAlignRight">
<span class="linkArrorPurble floatRight"></span><a class="linkFalco" href="/my_vodafone/toestel_en_instellingen/prepaid_wijzigen/blox_wijzigen">Bekijk alle voordeelbundels<!-- key: bundle.query.show.all.blox --></a>
</div>
<div class="clear">&nbsp;</div>
<div class="bold linkFalco paddingtop">Je hebt nog geen BloX voordeelbundels. <!-- key: header.prepaid.no.blox.falcor.text --></div>
<p style="padding-top:5px" class="linkFalco">Kijk eens naar onze voordeelbundels voor een goedkope en handige uitbreiding bij je Prepaid tarief.<!-- key: no.active.prepaid.blox.body -->&nbsp;</p>
<div class="clear">&nbsp;</div>
<br>
</div>
</div>
</div>
<div class="modFooter">&nbsp;</div>
</div>
</div>


Ik vermoed dat ik bij https://my.vodafone.nl/widget moet zijn om mijn data te krijgen, maar hoe vraag ik dat?

Welke held kan mij een duw in de goede richting geven? Een hapklare oplossing is uiteraard ook welkom. Als iemand zich er goed in vast wil bijten, maar geen vodafone nummer en account heeft, kan ik er wel een uitlenen. Stuur hiervoor even een PM.

Ik ben in elk geval erg dankbaar voor alle hulp. De collectie accounts die ik moet checken/loggen is inmiddels opgelopen tot 35, wat de potentie heeft om heel veel meer te worden. Ik wil dit uiteraard niet allemaal handmatig doen.

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 23:29
Bij zulk soort klusjes kijk ik altijd eerst naar de requests die worden gedaan, dan kun je altijd nog door de HTML/JS baggeren als de requests zelf niet duidelijk genoeg zijn.

Dus, installeer HttpFox en zoek de request die als content de gewenste data returned; doe hetzelfde dmv. wget.

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Ehm, ik krijg alle gegevens iig nog gewoon in die costcontrolpagina:

 curl -H 'Cookie: JSESSIONID=cookie_hier' 'https://my.vodafone.nl/My_Vodafone/tegoed_en_verbruik/costcontrol' | grep 8,58
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0										</span></td><td class="bold darkGreen blackTitle numRight" width="15%">Tegoed<!-- key: bundle.query.huidig.tegoed --></td></tr><tr><td class="left separator-left">Multimedia<!-- key: bundle.type.Multimedia --></td><td class="left"><span>&euro;&nbsp;</span><span class="blackTitle">45,76</span></td><td class="left separator-right"><span>&euro;&nbsp;</span><span class="blackTitle">8,58</span></td><td><div class="roundedBloxMeter"><div class="bloxMeter"><div style="width: 81.25%;" class="bloxMeterUsed"></div></div></div></td><td class="left darkGreen  bold numRight"><span>&euro;&nbsp;</span><span class="blackTitle">37,19</span></td></tr><tr><td colspan="5" height="10"><div class="clear">&nbsp;</div></td></tr><script id="sc_tag_extra" type="text/javascript">

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Soldaatje
  • Registratie: Juni 2005
  • Niet online
Kan je hiervoor geen overzicht van Vodafone krijgen dan?
Met 35 accounts ben je neem ik aan een belangrijke zakelijke klant.

Acties:
  • 0 Henk 'm!

  • TommyboyNL
  • Registratie: Januari 2006
  • Niet online
Thralas schreef op dinsdag 21 mei 2013 @ 02:33:
Dus, installeer HttpFox en zoek de request die als content de gewenste data returned; doe hetzelfde dmv. wget.
Ga ik doen, dankjewel voor de tip!
CyBeR schreef op dinsdag 21 mei 2013 @ 03:14:
Ehm, ik krijg alle gegevens iig nog gewoon in die costcontrolpagina:

 curl -H 'Cookie: JSESSIONID=cookie_hier' 'https://my.vodafone.nl/My_Vodafone/tegoed_en_verbruik/costcontrol' | grep 8,58
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0										</span></td><td class="bold darkGreen blackTitle numRight" width="15%">Tegoed<!-- key: bundle.query.huidig.tegoed --></td></tr><tr><td class="left separator-left">Multimedia<!-- key: bundle.type.Multimedia --></td><td class="left"><span>€ </span><span class="blackTitle">45,76</span></td><td class="left separator-right"><span>€ </span><span class="blackTitle">8,58</span></td><td><div class="roundedBloxMeter"><div class="bloxMeter"><div style="width: 81.25%;" class="bloxMeterUsed"></div></div></div></td><td class="left darkGreen  bold numRight"><span>€ </span><span class="blackTitle">37,19</span></td></tr><tr><td colspan="5" height="10"><div class="clear"> </div></td></tr><script id="sc_tag_extra" type="text/javascript">
curl gaan we dan ook maar eens aan het werk zetten. Goede tip!
Soldaatje schreef op dinsdag 21 mei 2013 @ 03:25:
Kan je hiervoor geen overzicht van Vodafone krijgen dan?
Met 35 accounts ben je neem ik aan een belangrijke zakelijke klant.
Helaasch. Het gaat om 35 prepaid kaartjes waar per stuk op jaarbasis maar 20 euro doorheen gaat. Ik heb al vaker zitten kijken naar abonnementen, maar dit wordt altijd significant duurder. Abonnementen heb je bij andere providers dan vodafone al vanaf 2,50 per maand, maar dan betaal je 1 euro per MB, terwijl ik nu een stuk minder betaal.


Ik ga weer klussen, ik laat het horen als ik progressie geboekt heb!


Edit: Thralas, held! HttpFox heeft alles voor me voorgezegd.
code:
1
wget --load-cookies="cookies.txt" --no-check-certificate --output-document="result.txt" "https://my.vodafone.nl/widget?widget=RenderPortletWidget&mimetype=text/html&_fs=es_my%20vodafone_tegoed%20en%20verbruik_costcontrol&_fp=BQ"

geeft
code:
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
<script type="text/javascript">
                    function showAllowedPriceplans(screen) {

                    var screenEsc =escape(screen);
                    var  title = "Wijzig je prepaid-tarief<!-- key: prepaid.priceplan.falcor.upgrade.title -->";
                    var width = "590";
                    var height = "450";
                    var url = screenEsc + "?color=purple&width=" + width + "&height=" + height +"&keepThis=true&TB_iframe=true" ;

                    TB_show(title, url, false);
                           $("TB_overlay").onclick = dummy;
                    }
                     function dummy(){ TB_remove();}
                    function closeSmoothBoxPriceplan() {
                       TB_remove();
                       location.reload(true);
                    }

                    function deleteBlox(screen) {
                    var screenEsc =escape(screen);
                    var  title = "Mijn Vodafone BloX<!-- key: prepaid.priceplan.falcor.deleteblox.title -->";
                    var width = "620";
                    var height = "510";
                    var url = screenEsc + "?color=purple&width=" + width + "&height=" + height +"&keepThis=true&TB_iframe=true" ;
                    TB_show(title, url, false);
                           $("TB_overlay").onclick = dummy;
                    }
                    function closeDeleteAddonSmoothBox(){
                        TB_remove();
                       location.reload(true);
                    }

             function showActivatPCE(screen) {
               var screen =escape(screen);
               var  title = "Spoedtegoed aanzetten<!-- key: pce.bar.unbar.title -->";
               var width = "620";
               var height = "430";
               var url = screen + "?color=purple&width=" + width + "&height=" + height +"&keepThis=true&TB_iframe=true" ;

               TB_show(title, url, false);
                        $("TB_overlay").onclick = dummy;
               }

               function closeSmoothBoxPCE() {
                    TB_remove();
                    location.reload(true);
               }
             </script><div class="mod4Col">
<div class="modBorder">
<div class="modBody">
<div class="modCopy">
<div class="floatLeft">
<h2 class="h2Title">Tegoed & verbruik voor <!-- key: myvodafone.pcecostcontrol.falcor.prepaid.portlettitle -->&nbsp;06-11344196</h2>
</div>
<div class="floatRight">
<h2 class="h2Title">Mei&nbsp;2013</h2>
</div>
<div class="clear">&nbsp;</div>
<div class="floatLeft blackTitle paddingtop">Jouw Prepaid-tarief:<? php echo ""; ?><!-- key: myvodafone.pcecostcontrol.falcor.prepaid.subscription -->Mobiel internet op je Laptop</div>
<div class="floatRight textAlignRight paddingtop">
<a href="javascript:showAllowedPriceplans('/prive/my_vodafone/toestel_en_instellingen/Prepaid_Wijzigen/Priceplan_Wijzigen');" class="linkFalco"><span class="linkArrorPurble floatRight"></span>Prepaid-tarief wijzigen<!-- key: link.prepaid.pcecostcontrol.upgrade --></a>
</div>
<div class="clear">&nbsp;</div>
<div class="modFalcor">
<div class="falcTop">&nbsp;</div>
<div class="falcBorder">
<div class="modCopy2col floatLeft">
<p class="blackTitle bold">Nog te besteden<!-- key: myvodafone.pcecostcontrol.prepaid.falcor.main.title --></p>
<div class="floatLeft paddingtop">
<p class="darkGreen falcorTitle bold separator-right padMarginReset">&euro;&nbsp;33,08</p>
</div>
<div class="floatLeft separator-left">
<a href="https://opwaarderen.vodafone.nl/VodafoneNLExternalWeb/SSO.do" class="buttonPurble"><span>Nu opwaarderen<!-- key: prepaid.blox.settings.upgraden.falcor.text --></span></a>
</div>
<div class="clear">&nbsp;</div>
<div style="padding-top:5px" class="grey">nog <!-- key: myvodafone.pcecostcontrol.prepaid.valid.falcor.credit -->239&nbsp;dagen bruikbaar t/m <!-- key: myvodafone.pcecostcontrol.prepaid.valid.falcor.credit2 -->15 <!-- key: myvodafone.pcecostcontrol.falcor.prepaidash1 -->Januari <!-- key: myvodafone.pcecostcontrol.falcor.prepaidash2 -->2014</div>
</div>
</div>
<div class="falcFooter">&nbsp;</div>
</div>
<div class="clear">&nbsp;</div>
<div class="clear">&nbsp;</div>
<div class="floatLeft blackTitle bold">Voordeelbundels<!-- key: header.prepaid.falcor.no.blox --></div>
<div class="floatRight paddingtop textAlignRight">
<span class="linkArrorPurble floatRight"></span><a class="linkFalco" href="/my_vodafone/toestel_en_instellingen/prepaid_wijzigen/blox_wijzigen">Bekijk alle voordeelbundels<!-- key: bundle.query.show.all.blox --></a>
</div>
<div class="clear">&nbsp;</div>
<div class="bold linkFalco paddingtop">Je hebt nog geen BloX voordeelbundels. <!-- key: header.prepaid.no.blox.falcor.text --></div>
<p style="padding-top:5px" class="linkFalco">Kijk eens naar onze voordeelbundels voor een goedkope en handige uitbreiding bij je Prepaid tarief.<!-- key: no.active.prepaid.blox.body -->&nbsp;</p>
<div class="clear">&nbsp;</div>
<br>
</div>
</div>
</div>
<div class="modFooter">&nbsp;</div>
</div>


Ik kan weer verder, nu nog wat grep en sed magie er overheen gooien :)

[ Voor 54% gewijzigd door TommyboyNL op 21-05-2013 18:01 ]