<a class="button real_time_availability real_time_availability_listing" type="button" onclick="_gaq.push(['_trackEvent', 'Inventory Request', 'Category page for SUPERSIX EVO (External User)', '2014 SuperSix EVO Black Inc.']);">Verfügbarkeit in Echtzeit</a>
1
2
3
4
5
6
7
8
9
10
sub visitLink {
$mech->get( $Zeilen[0]);
#hier möchte ich nun den button clicken
my $page_content = $mech->content();
open(file, ">t.html");
print file $page_content;
close (file);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- BEGIN GOOGLE ANALYTICS CODE -->
<script type="text/javascript">
//<![CDATA[
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-10877350-3']);
_gaq.push(['_trackPageview']);
//]]>
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
$j('.real_time_availability_listing').click(function(e){
var the_element = $j(this);
//remove error message if it's there
the_element.siblings('p.error').remove();
// replace with spinners
var availabilityRow = the_element.closest('tr').find('p.availability');
availabilityRow.html('<img src="'+ BASE_URL +'skin/frontend/csg/default/images/ajax-loader.gif' + '" />').attr('data-sku');
var skus = '';
availabilityRow.each(function() {
skus += 'skus[]=' + $j(this).attr('data-sku') + '&';
});
$j.ajax({
type: 'GET',
url: BASE_URL + 'catalog/product/availability',
data: skus,
dataType: 'json',
success: function(data){
if (data.error) {
the_element.after('<p class="error">' + data.message + '</p');
availabilityRow.html('unknown').addClass('error');
}
$j.each(data.availability_list, function(i, item) {
$j('p.availability[data-sku="'+item.sku+'"]').html(item.message);
if ($j(".future_availability")[0] && item.cssclass=='instock')
{
// Do something here if class exists
$j("p.future_availability[data-sku='" + item.sku + "']").html(item.fmessage);
}
else if (item.quantity == 0 && item.message == '' )
{
$j("p.availability[data-sku='" + item.sku + "']").html(item.fmessage);
}
//remove instock and outofstock classes just in case they've already been populated
$j('p.availability[data-sku="'+item.sku+'"]').removeClass("instock");
$j('p.availability[data-sku="'+item.sku+'"]').removeClass("outofstock");
if (item.cssclass=='instock') {
$j('p.availability[data-sku="'+item.sku+'"]').addClass("instock");
}
else if (item.cssclass=='outofstock'){
$j('p.availability[data-sku="'+item.sku+'"]').addClass("outofstock");
}
});
}
});
});
2013-09-15T22:40:39 janDamit siehst Du ja, welche Ajax-Requests da ausgelöst werden. Du musst also nur die SKUs finden und sie dann an die url BASE_URL + 'catalog/product/availability' übergeben und schon läuft das.
2013-09-16T12:08:17 user23432Das kann wirklich Javascript oder einen kompletten Browser emulieren? Muss ja ein besonderes PEAR-Modul sein, sag halt in einem PHP-Thread hier was du dann nimmst.Ich denke ich werde mein Glück mit php nochmal versuchen...
1
2
3
4
5
6
7
8
9
10
{
availability_list => [
{
sku => '...',
cssclass => '...',
quantity => '...',
message => '...'
}
]
}
2013-09-16T15:50:21 janIst aber nicht. Aus dem JS ist doch ziemlich offensichtlich, was da zurückkommt: ne Datenstruktur mit allem, was man braucht.
2013-09-16T15:50:21 janDa kann man sogar supereinfach einen Test schreiben, der täglich checkt, dass das Format sich nicht geändert hat und sinnvolle Werte zurückkommen.
2013-09-16T15:50:21 janDu verunsicherst den OP unnötig.
2013-09-16T16:36:28 bianca2013-09-16T15:50:21 janIst aber nicht. Aus dem JS ist doch ziemlich offensichtlich, was da zurückkommt: ne Datenstruktur mit allem, was man braucht.
Ja, so hat es den Anschein.
Hast du es live getestet? Ich wage solche Aussagen nicht, bevor ich das nicht selbst gesehen habe.
2013-09-16T16:36:28 bianca2013-09-16T15:50:21 janDa kann man sogar supereinfach einen Test schreiben, der täglich checkt, dass das Format sich nicht geändert hat und sinnvolle Werte zurückkommen.
Klingt ja so, als hättest du es schon fertig :) Zeig mal.
2013-09-16T16:36:28 bianca2013-09-16T15:50:21 janDu verunsicherst den OP unnötig.
Jeder muss sich seine eigene Meinung bilden. Erfahrungen und daraus resultierende Bedenken mitzuteilen ist Sinn und Zweck eines Forums. Finde deine Wertung unpassend.
$(".real_time_availability_listing").click( .... );
$j('.real_time_availability_listing').click(function(e){
1
2
3
4
5
6
7
8
9
sub visitLink {
print $Zeilen[1];
$mech->get( $Zeilen[1]);
# print "You could click on\n";
# for my $el ($mech->clickables) {
# print $el->{innerHTML}, "\n";
# };
$mech->click({xpath => '//a[text()="Verfügbarkeit in Echtzeit"]',synchronize =>0 });
}
{"error":0,"message":"","availability_list":[{"sku":"CM21274801","isAvailable":true,"quantity":"1","message":"1 Available","fmessage":"2 Available on Jan 12, 2014","cssclass":"instock"}]}
$perl_scalar = decode_json($json_text_string);