11import puppeteer from 'puppeteer-extra' ;
22import StealthPlugin from 'puppeteer-extra-plugin-stealth' ;
3- import { create } from 'xmlbuilder2' ;
4- import { XMLParser } from 'fast-xml-parser' ;
3+ import { create } from 'xmlbuilder2' ;
4+ import { XMLParser } from 'fast-xml-parser' ;
55import fs from 'fs' ;
66
77puppeteer . use ( StealthPlugin ( ) ) ;
@@ -13,40 +13,42 @@ const URL = 'https://apkpure.com/android-device-policy/com.google.android.apps.w
1313 const browser = await puppeteer . launch ( { headless : true , args : [ '--no-sandbox' , '--disable-setuid-sandbox' ] } ) ;
1414 console . log ( 'Browser launched' ) ;
1515
16+ let versions = [ ] ;
17+
1618 try {
1719 const page = await browser . newPage ( ) ;
18- await page . goto ( URL , { waitUntil : 'domcontentloaded' } ) ;
20+ await page . goto ( URL , { waitUntil : 'domcontentloaded' } ) ;
1921 console . log ( 'Page loaded' ) ;
20- } catch ( e ) {
21- console . error ( 'Page load failed:' , e ) ;
22- }
2322
24- await page . goto ( URL , { waitUntil : 'networkidle2' } ) ; // more aggressive wait
25-
26- const versions = await page . evaluate ( ( ) => {
27- const items = document . querySelectorAll ( 'li a.ver_download_link' ) ;
28- const result = [ ] ;
29-
30- items . forEach ( link => {
31- const versionDiv = link . querySelector ( '.ver-item-n' ) ;
32- const dateSpan = link . querySelector ( '.update-on' ) ;
33-
34- const version = versionDiv ? versionDiv . textContent . trim ( ) . replace ( / \s + / g, ' ' ) : null ;
35- const date = dateSpan ? dateSpan . textContent . trim ( ) : null ;
36- const href = link . getAttribute ( 'href' ) ;
37-
38- if ( version && date && href ) {
39- result . push ( {
40- version,
41- date,
42- link : href . startsWith ( 'http' ) ? href : `https://apkpure.com${ href } `
43- } ) ;
44- }
45- } ) ;
4623
47- return result ;
48- } ) ;
24+ await page . goto ( URL , { waitUntil : 'networkidle2' } ) ; // more aggressive wait
25+
26+ versions = await page . evaluate ( ( ) => {
27+ const items = document . querySelectorAll ( 'li a.ver_download_link' ) ;
28+ const result = [ ] ;
4929
30+ items . forEach ( link => {
31+ const versionDiv = link . querySelector ( '.ver-item-n' ) ;
32+ const dateSpan = link . querySelector ( '.update-on' ) ;
33+
34+ const version = versionDiv ? versionDiv . textContent . trim ( ) . replace ( / \s + / g, ' ' ) : null ;
35+ const date = dateSpan ? dateSpan . textContent . trim ( ) : null ;
36+ const href = link . getAttribute ( 'href' ) ;
37+
38+ if ( version && date && href ) {
39+ result . push ( {
40+ version,
41+ date,
42+ link : href . startsWith ( 'http' ) ? href : `https://apkpure.com${ href } `
43+ } ) ;
44+ }
45+ } ) ;
46+
47+ return result ;
48+ } ) ;
49+ } catch ( e ) {
50+ console . error ( 'Page load failed:' , e ) ;
51+ }
5052
5153 await browser . close ( ) ;
5254
0 commit comments