Consider changes in height
attempt to wait until window is available
This commit is contained in:
		
							parent
							
								
									da0ba0a40d
								
							
						
					
					
						commit
						2a7c2fc750
					
				
					 1 changed files with 76 additions and 47 deletions
				
			
		
							
								
								
									
										49
									
								
								scripts/external/scraper.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								scripts/external/scraper.js
									
										
									
									
										vendored
									
									
								
							|  | @ -3,26 +3,36 @@ Read the contents of the page. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| export default class scraper { | export default class scraper { | ||||||
| 	constructor(scraper_fields) { | 	/* | ||||||
|  | 	Scrape fields.  | ||||||
|  | 
 | ||||||
|  | 	@param {Object} scraper_fields the fields to scrape | ||||||
|  | 	@param {Object} options the options | ||||||
|  | 	*/ | ||||||
|  | 	constructor(scraper_fields, options = {"wait until available": true}) { | ||||||
| 		let field_content; | 		let field_content; | ||||||
| 
 | 
 | ||||||
| 		// Quickly scroll down then to where the user already was to get automatically hidden content. 
 | 		// Quickly scroll down then to where the user already was to get automatically hidden content. 
 | ||||||
| 		function autoscroll() { | 		function autoscroll() { | ||||||
| 			let SCROLL = {"x": window.scrollX, "y": window.scrollY}; | 			let SCROLL = {"x": parseInt(window.scrollX), "y": parseInt(window.scrollY)}; | ||||||
| 
 | 
 | ||||||
| 			// Repeat two times to ensure proper webpage load. 
 | 			// Repeat every ten milliseconds until 3 times.
 | ||||||
| 			for (let TIMES = 1; TIMES <= 2; TIMES++) { | 
 | ||||||
| 				[{"top": 0, "left": 0, "behavior": "smooth"}, {"top": document.body.scrollHeight, "left": document.body.scrollWidth, "behavior": "smooth"}].forEach((POSITION) => { | 			for (let SCROLLS = 1; SCROLLS <= 2; SCROLLS++) { | ||||||
|  | 				[{"top": document.body.scrollHeight, "left": document.body.scrollWidth}, {"top": 0, "left": 0}].forEach(POSITION => { | ||||||
|  | 					setTimeout(() => { | ||||||
| 						window.scrollTo(POSITION); | 						window.scrollTo(POSITION); | ||||||
| 				}) | 					}, 10); | ||||||
| 			}; | 				}); | ||||||
|  | 			} | ||||||
| 
 | 
 | ||||||
| 			// Scroll back to user's previous position.
 | 			// Scroll back to user's previous position.
 | ||||||
| 			window.scrollTo({"top": SCROLL[`y`], "left": SCROLL[`x`], "behavior": "smooth"}); | 			setTimeout(() => { | ||||||
|  | 				window.scrollTo(SCROLL); | ||||||
|  | 			}, 5) | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
| 		autoscroll(); | 		const read = () => { | ||||||
| 
 |  | ||||||
| 			if ((typeof scraper_fields).includes("object") && scraper_fields != null && scraper_fields) { | 			if ((typeof scraper_fields).includes("object") && scraper_fields != null && scraper_fields) { | ||||||
| 	 | 	 | ||||||
| 				/* Read for the particular fields. */ | 				/* Read for the particular fields. */ | ||||||
|  | @ -67,5 +77,24 @@ export default class scraper { | ||||||
| 					this[field_name] = field_content[field_name]; | 					this[field_name] = field_content[field_name]; | ||||||
| 				}); | 				}); | ||||||
| 			} | 			} | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		// Check every 1 second to check until autosccroll is done.
 | ||||||
|  | 		function wait_autoscroll(OPTIONS) { | ||||||
|  | 			return new Promise((resolve, reject) => { | ||||||
|  | 				// Check if autoscroll is done.
 | ||||||
|  | 				if (!((typeof window).includes(`undef`))) { | ||||||
|  | 					autoscroll(); | ||||||
|  | 					resolve(); | ||||||
|  | 				} else if (OPTIONS[`wait until available`]) { | ||||||
|  | 					setTimeout(() => { | ||||||
|  | 						wait_autoscroll().then(resolve).catch(reject); | ||||||
|  | 					}, 1000); | ||||||
|  | 				} else { | ||||||
|  | 					reject(); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 		wait_autoscroll(options).then(() => {read();}); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue