Gå til innhold

Laste inn hele siden med PhantomJS


Anbefalte innlegg

Skrevet

eller CasperJS.

 

Jeg prøver meg litt med PhantomJS, men har et elementært problem.

Når jeg tester koden under så lastes kun bildene fra første 'side'.

Hvordan får jeg lastet alt?

 

var page = require('webpage').create();
page.viewportSize = {width: 1024, height: 768};
page.open('https://www.vg.no', function(status) {
	console.log("Status: " + status);
	if(status === "success") {
		page.render('vg.png');
	}
	phantom.exit();
});
 
Videoannonse
Annonse
Skrevet

Hei, hva mener du med alt?

 

Hvis du vil ha et større utsnitt kan du øke height som en 'hack' kanskje?

Evnt scrolle til bunn for å trigge lazyloading om det er en slik problemstilling du ser.

Skrevet

Det med å øke høyden virker noen plasser, men ikke alltids, og jeg vet ikke om siden vil ha en total høyde på 20 000, eller 200 000.

 

Dette er hva jeg vår når jeg tester på vg sine sider:

https://i.imgur.com/w3BoKuU.jpg

 

Jeg vil tro scrolling kan virke, men jeg vet ikke helt hvordan.

Når jeg prøvde det her om dagen, så fikk jeg kun til å laste top, og bunn, ikke det i mellom, så jeg gjorde noe feil der (og slettet derfor koden jeg hadde).

Skrevet

VG bruker en form for lazy-loading som trigges ved scrolling. Det sjekkes om bildet holder på å komme inn i synsfeltet til browseren før det vises. Så jeg ville hatt noe kode som scrollet nedover. Ikke hoppe rett til bunn, men flere stopp underveis.

Skrevet (endret)

Kan ta utdrag fra kode som jeg har brukt før for og scrolle nedover.

Bruker her PhantomJS() fra Selenium.

Scroller her nedover på en men verdi satt i window.scrollTo().

Høyere vill verdi scrolle lenger av gangen,

så lager her egne sider på websider som ikke har det f.eks infinite scrolling.

driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get(url)
for page in range(page_count):
    page_source = driver.page_source
    driver.execute_script("window.scrollTo(0,100000000000);")
Endret av snippsat
Skrevet

Jeg tror jeg kom fram til en løsning:

var url = 'https://vg.no';
var viewWidth = 1024;
var viewHeight = 768;

var casper = require('casper').create();
casper.options.viewportSize = {width: viewWidth, height: viewHeight};

casper.start(url, function() {
	var scrollCount = 1;
	var scrollMax = this.evaluate(function () { return document.body.scrollHeight; });
	this.repeat(Math.floor(scrollMax/viewHeight), function() {
		this.wait(200, function() {
			scrollCount++;
			this.scrollTo(0, scrollCount*viewHeight);
		});
	});
});

casper.then(function() {
	this.capture("vg.png");
});

casper.run();
 

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...