New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

puppeteer-autoscroll-down

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

puppeteer-autoscroll-down - npm Package Compare versions

Comparing version 0.2.0 to 1.0.0

.github/workflows/test.yml

6

CHANGELOG.md

@@ -5,2 +5,8 @@ # Change Log

## 1.0.0
- Moved to named export. Use `const { scrollPageToBottom } = require('puppeteer-autoscroll-down')`.
- Renamed and moved options to object. Use `scrollPageToBottom(page, { size: 500, delay: 250, stepsLimit: 10 })`.
## 0.2.0

@@ -7,0 +13,0 @@

44

index.d.ts

@@ -1,8 +0,38 @@

import { Page } from 'puppeteer'
import { Page } from 'puppeteer-core'
export declare function scrollPageToBottom(
page: Page,
scrollSize?: number,
scrollDelay?: number,
scrollStepsLimit?: number
): Promise<number>
export type Options = {
/**
* Number of pixels to scroll on each step
* @type {number}
*/
size?: number
/**
* Delay after each completed scroll step
* @type {number}
*/
delay?: number
/**
* Max number of steps to scroll
* @type {number}
*/
stepsLimit?: number
}
/**
* Scrolling page to bottom
*
* @example
* ```js
* const browser = await puppeteer.launch()
* const page = await browser.newPage()
* await page.goto("https://en.wikipedia.org/wiki/Main_Page")
* const lastPosition = await scrollPageToBottom(page)
* await browser.close()
* ```
* @param {Page} page
* @param {Options} options
* @returns {Promise<number>}
*/
export declare function scrollPageToBottom(page: Page, options: Options): Promise<number>

41

index.js

@@ -1,29 +0,16 @@

/**
* Scrolling page to bottom based on Body element
* @param {Object} page Puppeteer page object
* @param {Number} scrollSize Number of pixels to scroll on each step
* @param {Number} scrollDelay Delay after each completed scroll step
* @param {Number} scrollStepsLimit Max number of steps to scroll
* @returns {Number} Last scroll position
*/
async function scrollPageToBottom(
page,
scrollSize = 250,
scrollDelay = 100,
scrollStepsLimit = null
) {
const lastScrollPosition = await page.evaluate(
async (pixelsToScroll, delayAfterStep, stepsLimit) => {
const getElementScrollHeight = (element) => {
async function scrollPageToBottom(page, { size = 250, delay = 100, stepsLimit = null } = {}) {
let lastScrollPosition = await page.evaluate(
async (pixelsToScroll, delayAfterStep, limit) => {
let getElementScrollHeight = element => {
if (!element) return 0
const { scrollHeight, offsetHeight, clientHeight } = element
let { scrollHeight, offsetHeight, clientHeight } = element
return Math.max(scrollHeight, offsetHeight, clientHeight)
}
const scrollToBottom = (resolve) => {
let scrollToBottom = resolve => {
let lastPosition = 0
const intervalId = setInterval(() => {
const { body } = document
const availableScrollHeight = getElementScrollHeight(body)
let intervalId = setInterval(() => {
let { body } = document
let availableScrollHeight = getElementScrollHeight(body)

@@ -35,3 +22,3 @@ window.scrollBy(0, pixelsToScroll)

lastPosition >= availableScrollHeight ||
(stepsLimit !== null && lastPosition >= pixelsToScroll * stepsLimit)
(limit !== null && lastPosition >= pixelsToScroll * limit)
) {

@@ -46,5 +33,5 @@ clearInterval(intervalId)

},
scrollSize,
scrollDelay,
scrollStepsLimit
size,
delay,
stepsLimit
)

@@ -55,2 +42,2 @@

module.exports = scrollPageToBottom
module.exports = { scrollPageToBottom }
{
"name": "puppeteer-autoscroll-down",
"version": "0.2.0",
"version": "1.0.0",
"description": "Handle infinite scroll on websites with puppeteer",
"main": "index.js",
"types": "./index.d.ts",
"engines": {
"node": ">=12"
},
"license": "MIT",
"author": "mbalabash <maksim.balabash@gmail.com>",
"scripts": {
"prettier": "prettier --write -l '**/*.js'",
"eslint": "eslint . --cache --fix",
"test": "echo \"Error: no test specified\" && exit 1"
"unit": "tsm node_modules/uvu/bin.js test/",
"test": "eslint . && check-dts && yarn unit"
},
"peerDependencies": {
"puppeteer": ">5.x"
"eslintConfig": {
"extends": "@logux/eslint-config"
},
"eslintIgnore": [
"example/index.js"
],
"prettier": {
"arrowParens": "avoid",
"quoteProps": "as-needed",
"semi": false,
"singleQuote": true,
"trailingComma": "none"
},
"dependencies": {},
"devDependencies": {
"@logux/eslint-config": "^46.1.0",
"@types/puppeteer": "^5.4.4",
"eslint": "^8.1.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-jest": "^25.2.3",
"husky": "^7.0.4",
"lint-staged": "^11.2.6",
"prettier": "^2.4.1"
"check-dts": "^0.6.5",
"eslint": "^8.4.1",
"eslint-config-standard": "^16.0.3",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prefer-let": "^3.0.1",
"eslint-plugin-promise": "^5.2.0",
"find-chrome-bin": "^0.1.0",
"puppeteer-core": "^13.0.0",
"tsm": "^2.2.1",
"typescript": "^4.5.3",
"uvu": "^0.5.2"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.(js)": [
"prettier --write",
"eslint --cache",
"git add"
]
},
"keywords": [
"headless-chrome",
"puppeteer",

@@ -43,9 +53,7 @@ "parsing",

],
"homepage": "https://github.com/mbalabash/puppeteer-autoscroll-down/blob/master/README.md",
"homepage": "https://github.com/mbalabash/puppeteer-autoscroll-down#readme",
"repository": {
"type": "git",
"url": "https://github.com/mbalabash/puppeteer-autoscroll-down"
},
"author": "mbalabash",
"license": "MIT"
}
}

@@ -1,13 +0,25 @@

## Handle infinite scroll on websites with puppeteer
# Handle infinite scroll on websites with puppeteer
Small puppeteer tool which makes your parsing experience a little bit better
### Usage
## Usage
**`size` - Number of pixels to scroll on each step** `[default: 250]`.
**`delay` - Delay in ms after each completed scroll step** `[default: 100]`.
**`stepsLimit` - Max number of steps to scroll** `[default: null]`.
```js
const puppeteer = require('puppeteer')
const { scrollPageToBottom } = require('puppeteer-autoscroll-down')
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(SOME_URL)
await page.goto('http://example.com')
const lastPosition = await scrollPageToBottom(page)
const lastPosition = await scrollPageToBottom(page, {
size: 500,
delay: 250
})

@@ -17,17 +29,28 @@ await browser.close()

**You can use returned value with request/response hooks to handle async content uploading.**
### Async content loading
### Scrolling options
**You can use returned value with request/response hooks to handle async content loading.**
**`scrollSize` - Number of pixels to scroll on each step** `[default: 250]`.
```js
const puppeteer = require('puppeteer')
const { scrollPageToBottom } = require('puppeteer-autoscroll-down')
**`scrollDelay` - Delay in ms after each completed scroll step** `[default: 100]`.
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('http://example.com')
**`scrollStepsLimit` - Max number of steps to scroll** `[default: null]`.
let isLoadingAvailable = true // Your condition-to-stop
### How?
while (isLoadingAvailable) {
await scrollPageToBottom(page, { size: 500 })
await page.waitForResponse(
response => response.url() === 'http://example.com' && response.status() === 200
)
isLoadingAvailable = false // Update your condition-to-stop value
}
**We take available scroll height from `body` element and then using [`window.scrollBy`](https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollBy) method to scroll pages.**
await browser.close()
```
### Install
## Install

@@ -44,4 +67,4 @@ ```js

### Contributing
## License
Feel free to ask or open an issue.
MIT
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc