| 651 | * @param page Page |
| 652 | */ |
| 653 | export const scrollThroughPage = async (page: Page) => { |
| 654 | const viewport = (await page.viewport()) || { |
| 655 | height: 480, |
| 656 | width: 640, |
| 657 | }; // default Puppeteer viewport |
| 658 | |
| 659 | await page.evaluate((bottomThreshold) => { |
| 660 | const scrollInterval = 100; |
| 661 | const scrollStep = Math.floor(window.innerHeight / 2); |
| 662 | |
| 663 | function bottomPos() { |
| 664 | return window.pageYOffset + window.innerHeight; |
| 665 | } |
| 666 | |
| 667 | return new Promise((resolve) => { |
| 668 | function scrollDown() { |
| 669 | window.scrollBy(0, scrollStep); |
| 670 | |
| 671 | if (document.body.scrollHeight - bottomPos() < bottomThreshold) { |
| 672 | window.scrollTo(0, 0); |
| 673 | setTimeout(resolve, 500); |
| 674 | return; |
| 675 | } |
| 676 | |
| 677 | setTimeout(scrollDown, scrollInterval); |
| 678 | } |
| 679 | |
| 680 | scrollDown(); |
| 681 | }); |
| 682 | }, viewport.height); |
| 683 | }; |
| 684 | |
| 685 | export const noop = (): void => {}; |
| 686 | |