Comments (4)
Sorry, @yemd, I cannot reach this library maintainer to get access to publishing updates. I'd recommend building a custom solution using puppeteer instead of using this library.
from headless-chrome-crawler.
worked for me like that:
customCrawl: async (page, crawl) => {
await page.setViewport({
width: 1200,
height: 800
});
const result = await crawl();
await page.evaluate(scrollToBottom);
await page.waitFor(3000);
return result;
},
...
async function scrollToBottom() {
await new Promise(resolve => {
const distance = 100; // should be less than or equal to window.innerHeight
const delay = 100;
const timer = setInterval(() => {
document.scrollingElement.scrollBy(0, distance);
if (document.scrollingElement.scrollTop + window.innerHeight >= document.scrollingElement.scrollHeight) {
clearInterval(timer);
resolve();
}
}, delay);
});
}
from headless-chrome-crawler.
Here is how I kept scrolling through a list for lazy loaded products untill the crawler reached the bottom of the page. I hope this helps :)
const productCrawler = await Crawler.launch({
/*... */
});
await productCrawler.queue({
url: '...',
retryCount: 1,
maxDepth: 3,
depthPriority: false,
waitUntil: 'networkidle0',
jQuery: false,
waitFor: {
options: {},
args: [config], // args for selectorOrFunctionOrTimeout
selectorOrFunctionOrTimeout: function (config) {
const documentHeight = document.documentElement.scrollHeight;
window.scrollTo(0, documentHeight);
// You might want to check if there are any elements still loading (look for spinners, other indicators, or just wait)
// Return true if you are done scrolling, false otherwise
return true;
},
},
});
await productCrawler.onIdle();
await productCrawler.close();
If not you can always scroll inside the evaluatePageMethod
const productCrawler = await Crawler.launch({
// ...
evaluatePage: eval(`() => {
const documentHeight = document.documentElement.scrollHeight;
window.scrollTo(0, documentHeight);
}`),
// ...
})
from headless-chrome-crawler.
Take a look at get-set-fetch infinite scrolling example. It may prove a viable alternative.
Disclaimer: I'm the repo owner.
from headless-chrome-crawler.
Related Issues (20)
- Is this project still active? HOT 2
- Too many branches HOT 1
- Save HTML and CSS instead of screenshot? HOT 3
- Get current URL in customCrawl() HOT 3
- Disable loading images HOT 2
- how disabled "UnhandledPromiseRejectionWarning: Error: Protocol error" HOT 1
- how overwrite cache set function?
- how set append?
- Can Update Puppeteer version to 5.2.1
- Are links with empty href ignored? (button links handled by page js) HOT 1
- Protocol error: Connection closed. Most likely the page has been closed. HOT 1
- Crawling site with maxDepth > 2 causes hang HOT 3
- Provide auth to page when using proxy
- subdomain crawl with "allowedDomains" parameter crawls top domain, too
- i get a JSHandle@node string instead of a ElementHandle object
- [bug]hang ..........
- How can i make customCrawl click on specific elements? HOT 1
- Can some one guide me how to use proxy ips with this? HOT 1
- Proxy not working --proxy-server
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from headless-chrome-crawler.