{"_id":"@danilidonbeltran/webscrapper","_rev":"22-565349d31875da775d3fa1bee32781cc","name":"@danilidonbeltran/webscrapper","dist-tags":{"latest":"4.0.0"},"versions":{"1.0.2":{"name":"@danilidonbeltran/webscrapper","version":"1.0.2","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.0.2","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"1e364bb86b8a5e2fbb4c0baf8230b2714611fb77","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.0.2.tgz","fileCount":13,"integrity":"sha512-dEq+/Za043XncC9fs0iS4xWFkKiGKk5LXAtE3Oqhh2LlJXi8/rtxY37sYkdDJxbZcItC2cOPspKVh8HuDz3PVg==","signatures":[{"sig":"MEUCIQCP+74E2BkxTUjC/kL41LeXKVAK8QtwnADrYJd84ygUSwIgYxxuiQDJ0ocI1uFeVX7rGDTy5HhqqjZVbhJBamh+6xk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53299},"main":"src/index.js","type":"module","gitHead":"67cfece9883d11dfdeb0717f07a33170f00baa18","private":false,"scripts":{"test":"node src/test.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.0.2_1760534673982_0.30165235855730077","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@danilidonbeltran/webscrapper","version":"1.1.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.1.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"a249875543961433017d7585ff1a5eca43763f0f","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.1.0.tgz","fileCount":17,"integrity":"sha512-Dw1VP+dV77Nkh96T0EQDjHPv9eC8GcrT5e1DUNVAax5bbdhhavFu/gpFjFx2IMZC4r6M60UxMAUBC1Jz/82ADw==","signatures":[{"sig":"MEUCIGpeuY7eaGrVurJvnoM40RPEgFxOAwZr5S8Sl0tAsfWvAiEAwYCl6OpQ3CD212p3y9BIMz6vy0WA0fdQCOC9sRqS3SQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57812},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"a015087244ee5b564b60c891cd27dd41593a66a3","private":false,"scripts":{"test":"node src/test.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.1.0_1760534866775_0.15277702430281814","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@danilidonbeltran/webscrapper","version":"1.2.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.2.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"a126d9ea260d82fa4da6b8ac8f827703c61e7f35","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.2.0.tgz","fileCount":17,"integrity":"sha512-MMfbl2dNfHsdA4eWea04T5lVG1npi/hoLvmuqwWL3gWGA//KiVKLPUp/KkXouVbsjr52aWT0GuiH+kmILkBhpQ==","signatures":[{"sig":"MEQCIATCex8svye+e/1ueeCr9w9AUt7j3JN73LzWJV3igVbFAiAHkj4dIJ96xgFf4LpIY/z3HRCxzA495LglM5gw0rHDRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57740},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"3da783faae0392800ad57b05b89f9247a4bd07a2","private":false,"scripts":{"test":"node src/test.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.2.0_1760621846992_0.5700268630971215","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@danilidonbeltran/webscrapper","version":"1.3.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.3.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"03f4fcbed9c8d8583b0bc4d518bf8a59bc94b4b6","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.3.0.tgz","fileCount":18,"integrity":"sha512-uFkIMN0LNar9nkArroY9jmkaPMpONMdpaja21TVTwd8Oksnng6IY8sOptk4i2FNAGFU+o1a32Oesb823Fc6Jkw==","signatures":[{"sig":"MEUCIAXiMCaaqmHw3F0me/AYhAes7s3vuprtOViSm2dO4pRfAiEA6UaJq4BbvvMdbCXPbeK0DxAspUoyey0QIfFY96R9jgg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61876},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"35840f8a48222f4f87df4eec3b2a1f446e53e40e","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.3.0_1760689726257_0.9669910958476369","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@danilidonbeltran/webscrapper","version":"1.4.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.4.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"cccd167cd70ab77c360741205fcdfaa07088323e","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.4.0.tgz","fileCount":17,"integrity":"sha512-oPKbqs9H7yHyvF3tSfMlzknq6E2idxXMuaoWYlC5aF37KlOt3fvirh9FLWf+q9O3m4IY9qd+Iy3yXq01OZeYsw==","signatures":[{"sig":"MEYCIQDoOAe2uFKjmuCn2XhOUvWdvviSLMR6Ij0J7I4g++l9IQIhAMppMn/ntkLrCTTfgX7rInfO4T2eTho39veJy8XBboR1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61592},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"d379bbfcc9797bd6d68600ddffd740c37f3764b6","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.4.0_1760696241055_0.6842332751497189","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@danilidonbeltran/webscrapper","version":"1.4.1","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.4.1","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"b43fdb84e39baef91a909cfdbbb0a839c985c414","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.4.1.tgz","fileCount":17,"integrity":"sha512-Qctj+tXXAxXOdwdbzqhFwt8UgDMRDgZ5Y/j3vn3FgsL33P4E2JFpzuMhemlSHE+YYE57Lo12+yJd9PLTvVdybQ==","signatures":[{"sig":"MEUCIGN55JoIstTQanHLsnYu53cnFHCi7RFxI0I/a5YehMyTAiEAvtiE0R3558rKX7FuOQVyv4d8rZxHq8+M9QwTePTmsd0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61734},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"14d25dbb73a088a63832113f9aed953ca101882e","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.4.1_1760703733451_0.17771360945572545","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@danilidonbeltran/webscrapper","version":"1.4.2","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.4.2","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"12da89c21b56e5bfcbc2559d05fbf6c3a6c2132d","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.4.2.tgz","fileCount":17,"integrity":"sha512-T4xLXmmnLoEJnAq76cgsdQ7/LzWmuWrwcK6mmls2CZLw1+17cfW0r9V7ZDV/XBPBvtoK12fdtT91xErrBKT8hA==","signatures":[{"sig":"MEYCIQDRhQHMPsdsf/gX8HnQb9huXJWRTKzeaZuaGSZZdIYj4AIhAOkX0X+zdoG0fm5B2/VyltCeMlstwqhLMnEYfX3Psr24","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61671},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"0fb870ab14c2c9e07bc5039a5d955b8932dbea4e","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.4.2_1760976355270_0.4084041033882011","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@danilidonbeltran/webscrapper","version":"1.5.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.5.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"c50b5ba12370a742c5c8f74e8dbd4e4c1de72bd5","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.5.0.tgz","fileCount":17,"integrity":"sha512-MDME+qaJqJFdmhxrr/u5PO2pXpytaBMMWHsa9CHylOyF3c57YRZVyDZmh2D7IfTUzgjDEwrVBAvkEGsC6GHCug==","signatures":[{"sig":"MEYCIQCY2tDPr5VeDKXskcaTyLc7XcFu4ZmyDhNTIViXFTLcnAIhAN67bO8ZwPBunGGsQpEpqZ9qS/Mh0yZtv21wFfLDFqjQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67019},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"344dadfebca0c8e2c9935718f700adb4c3f168fd","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.5.0_1760994971482_0.9531642477889355","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@danilidonbeltran/webscrapper","version":"1.6.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.6.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"54945ce3f35cfae972a927f799a9514baf1a1285","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.6.0.tgz","fileCount":21,"integrity":"sha512-8cWspJUx53PpZvwdL7MIpXQxyuLWViggdPg0buQUSmnp4YPORcneoBM6v8aWPiZCx+QPLb+8kbc/muj7hn8CTQ==","signatures":[{"sig":"MEUCIE3co83dtdzR2EVNTY3uMybXkh4rF8jPWLxQF8Rs9gPIAiEAzrmHF6uBcI2h2b11kYZvSnt22i3jeXSQCV/xhFP2Rc8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69706},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"0ac47922cd40ce0d1c0cac8374d6fa0fdcb1aba3","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.6.0_1760996169123_0.9793431296297408","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@danilidonbeltran/webscrapper","version":"1.7.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.7.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"a7202abc08783ba5e3fbb5f567516cf1b6371af7","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.7.0.tgz","fileCount":21,"integrity":"sha512-VpobeCaw1SpApyoDRGVfb+bCjZ4Sy6MAk3PY1ShrSHC5qAFyYXCOBq6H+kcsGFuZVDmGP/Kq4r8UzmjFXJXsPQ==","signatures":[{"sig":"MEQCIFbnQfYaX4a8DnVl+p+n2dn75bw0QiPei8qm/cgtR3f/AiBox8wiXTftdutjTPHglK3Vfy4ZReHHtnzPXzYuS+0hfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71359},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"f95c28da668b68695ee99ad2f2eb63e672f5adeb","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.7.0_1762430676474_0.26750163341200284","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@danilidonbeltran/webscrapper","version":"1.8.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.8.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"67a98ff6f3898ca055aa86167f1790e8ba2da8bd","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.8.0.tgz","fileCount":23,"integrity":"sha512-QQQjbo1qAf77d+kTNhnXIVdawyKAF4pGGmR1C8ThbkCLn/K1JCN3K1Njls+kGl2ZhGA8+27fRxp5G/L5lb+fkA==","signatures":[{"sig":"MEYCIQC1NiqhszKTcN9mFjjB5ieYqA/TCzi2o/RCk3o0ob0FRgIhAKzPTNtRpzWIY5xgp2Ax/QGfs32xhefUDKc7bBJtjq0l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74573},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"12fad996479fd3185d28827bb2a35b9d2903186e","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.8.0_1762767022234_0.4569664905130446","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@danilidonbeltran/webscrapper","version":"1.9.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.9.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"19cb0b7bc9c998b130a0e0b2f89b8b4f500272bc","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.9.0.tgz","fileCount":25,"integrity":"sha512-SvJDv2mAz+22hjleuSv1vH+XnYWQY5PM5IpLIROk9w0IaI0pTOYFwZHV8woH/eK/ddBoa+18K3bRJy08hTf+8w==","signatures":[{"sig":"MEUCIQC6D+o21nO/296Ny2WPQ0p0P37TMHQq9yn20FitLKmQSgIgYADjNoAodcjxtSaQARUhszPYjkOF4I2HJ/RnSTXxRJo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76002},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"6e13989d161135b0bfd2acf1a99e63cd7b10c33b","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.9.0_1762955867207_0.7315045596572696","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@danilidonbeltran/webscrapper","version":"1.9.1","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.9.1","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"328cffb8efa9e5e0f3e1775bd396fc3b174f4c91","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.9.1.tgz","fileCount":25,"integrity":"sha512-F86fSk3ex3oA27W0qjE6IujJPeBtVAmMbat/ApiFBFOPzyJ0IQ3K4tTo+FQDGv2QiIMCVvLbRzaMxCFfhsL9cQ==","signatures":[{"sig":"MEQCIBY+6VOVZOwelc+dCcJ6ERRgPkeNsGj7R6E03L3+Yb5rAiB/hBs1ioz2h1L2VRKFlweGqir/aUrQfTN2j1qDVqGlSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76075},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"be59f500768560bfb34c93ad54a2c856c3552754","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"10.9.2","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.9.1_1762956107165_0.9214818257433193","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@danilidonbeltran/webscrapper","version":"1.9.2","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@1.9.2","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"b38a6deeca86ba9ce91bdcdcea6fba8bcd76269b","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-1.9.2.tgz","fileCount":26,"integrity":"sha512-84nJrRUatedP/s/wDLG0pMes2rTkVjIoZGYwjFi4klMKNUUbAqFsUV7DcO4jSM295M0IvZgxje65m/9WDiCwPQ==","signatures":[{"sig":"MEUCIFtNsTo8NLwbm4Fyku5320p13mpKmz6haiqqbfyzWjoUAiEAmlRoKBrF1h/Z04X0I9r2gO0dLXSzg30UTSJGDJ6niYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76333},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"a648cc2fa612688a9331592b83ba0baf4354c04a","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_1.9.2_1776945121205_0.006095800534647422","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@danilidonbeltran/webscrapper","version":"2.0.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@2.0.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"abda2096d6e8eb72204d44c314ab0638182f08b5","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-2.0.0.tgz","fileCount":26,"integrity":"sha512-IN05w4YkKL1ARDHyzFvBLWUdt1vZqwPNs1TblJtBkP5Khry8tc9cS9QeJae+O7sjpmaurEQcIX9v6b8GE9WbAA==","signatures":[{"sig":"MEQCIH+PcpLulCMsRVmmWw2xF9GI8SJFP54Iztg3kt2x3cKuAiBajZrAthdZFEwcS8KB1y96sFDdLNTW3YQBG8HjICtpkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77731},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"2b21b8535384197b2487dd5a9f5e4f0303cbea4d","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_2.0.0_1776947118032_0.2706051131968785","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@danilidonbeltran/webscrapper","version":"2.1.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@2.1.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"dist":{"shasum":"bfa2a6e23f5d449603fdd8525e9b85f4faca9936","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-2.1.0.tgz","fileCount":26,"integrity":"sha512-+HP8/SLgfo9UNT1P8Y+vZP23QKZZqafTqh1MQU3nGUPoBX9BxNgHYhUfLhTiwtzUa07lWDbRdzLfDgNhMVG1lA==","signatures":[{"sig":"MEUCIQDQZ5cYogO5BW6+MRsbc/FJjuts+AAgvoyLa3hdX64YpQIgP/0MdUJ+ruo8AM8zHqIPyC0oFni+6Vx1REw+3WKTbyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79582},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"3ebaa43666489e910e3aa62f9ff886029ced0a17","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_2.1.0_1776948500803_0.19649597871461189","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@danilidonbeltran/webscrapper","version":"2.2.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@2.2.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"bin":{"webscrapper":"src/commands/scrape.js"},"dist":{"shasum":"e30af00d564803c742fc9505c2569d0af4ba95b3","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-2.2.0.tgz","fileCount":26,"integrity":"sha512-+f3l3VTE3kKwkQZHJuI9/hIfFT8pfkpYA710xYU/WXMgOo+LZNMEQvOKbSoXHkpszee5mdE6iHtpDbQ+c1zFng==","signatures":[{"sig":"MEYCIQClY9joE0ynWWJB6Vx9D1edQZUDX7c/eP9exT83mUE2ugIhAM51MR+l1u43lTnQYYgTqDnIfiUmsQiSh3Mkip073MPB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80193},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"3f2fbe8b3ad1e75182009541b3de8edbe777dccb","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_2.2.0_1777878101751_0.4674387318722397","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@danilidonbeltran/webscrapper","version":"2.2.1","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@2.2.1","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"bin":{"webscrapper":"src/commands/scrape.js"},"dist":{"shasum":"20152ae51fa59106d4233c38dd937893ceab8d15","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-2.2.1.tgz","fileCount":26,"integrity":"sha512-MgU4HXc51hXZI5qBo626ZUvw2SqzV+Sl2fj+8SKHNMnibro0BOVN3bGzpgLPet3M9JDkbu4olKBsoHjdET9A5Q==","signatures":[{"sig":"MEYCIQCpp0Dc3vtqXFtN8fTmnzOrp/dWzH4VjIMTqPxVCMpCOwIhAIYzdJSptytvk7ahJ0xw/7CGkxRAqfxwJZJh8GlhubQt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79785},"main":"src/index.js","type":"module","types":"src/index.d.ts","gitHead":"ca0c18aa36ea4b372eeee0d6b4a3db4faab39f84","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_2.2.1_1777879167708_0.8200231331442147","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@danilidonbeltran/webscrapper","version":"2.3.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@2.3.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"bin":{"webscrapper":"src/commands/scrape.js"},"dist":{"shasum":"bbbb5752dd92800b92e09f93734a352781b6bf21","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-2.3.0.tgz","fileCount":29,"integrity":"sha512-T/l0sPs0um068asDsnvp2VQ898Upa6qXY5xjaawOxNtf+9oANz/knlmi+Hko163ikYgYPMNv+vUjPQh7zocc1A==","signatures":[{"sig":"MEUCIG7yYOfbO6ELkiMMKlLZmEln0X4gfuppBFGnDdrZOrUrAiEAl7fLKmMWcE9ebCFCZJCp8DuqD0taY85iRhwBuwGI1Fw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91200},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"npm":">=11.10.0","node":">=20.0.0"},"gitHead":"c825ee8fe52b290e2d2d7b741f48c56ec12ce056","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_2.3.0_1780657069104_0.9911999232593229","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"@danilidonbeltran/webscrapper","version":"2.3.1","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@2.3.1","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"bin":{"webscrapper":"src/commands/scrape.js"},"dist":{"shasum":"8eb2989f4e30c1936a6409fa539ffe506b602b9d","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-2.3.1.tgz","fileCount":29,"integrity":"sha512-T80R7IBJxwsXHS+Pevfnn90j1YRWIr9vxhsy8A38EWD1CAp0l3lh7I6ohKQ35Mjz6jA2rK49u27Tq7bh6Q4HmA==","signatures":[{"sig":"MEYCIQCJ8T5pPu+3lCfz6R0JZUEzf0224l2lB31EubYLzyLHSgIhAKKfWAMq6xtxeBhKjdeicwxPBuLQxp02uaEE/lKFQ2AT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93405},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"npm":">=11.10.0","node":">=20.0.0"},"gitHead":"3ed7a4b3e7674f8edf0da310eb1320b68a7812e7","private":false,"scripts":{"test":"node src/test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_2.3.1_1781092701734_0.5059621601180815","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@danilidonbeltran/webscrapper","version":"3.0.0","keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","_id":"@danilidonbeltran/webscrapper@3.0.0","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"bin":{"webscrapper":"src/commands/scrape.js"},"dist":{"shasum":"6371ab875d0fa7d9d003ea4db3ba42106ea5db21","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-3.0.0.tgz","fileCount":26,"integrity":"sha512-1YFU92VyJSBGoDkeX3+hW5b8X0xOGoMZmX/DldCkkWfT969p7TK9z7OAlJ0xXk1Du69vnaXSJq7PHBFOsOFmfQ==","signatures":[{"sig":"MEQCIEtMAprU2oHvHIq+PjB7xqj7D7KPw4BWFRj5YcaX+FrPAiB1Qa7UySrI3RaYlc6O1n1lSBgLERqX3HxC5CNsUM69ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94791},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"npm":">=11.10.0","node":">=20.0.0"},"gitHead":"fb32c0aa9dfd1624759c46a919a4e153c89f8582","private":false,"scripts":{"test":"node src/webscrapper.test.js","debug":"PWDEBUG=1 node src/commands/scrape.js","scrape":"node src/commands/scrape.js","show-preset":"node src/commands/show-preset.js","list-presets":"node src/commands/list-presets.js","install-browsers":"npx playwright install"},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"_npmVersion":"11.12.1","description":"A web scraper using Playwright to extract all text content from websites","directories":{},"_nodeVersion":"22.17.1","dependencies":{"playwright":"^1.40.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/webscrapper_3.0.0_1786287004370_0.9024225660776177","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@danilidonbeltran/webscrapper","version":"4.0.0","description":"A web scraper using Playwright to extract all text content from websites","main":"src/index.js","engines":{"node":">=20.0.0","npm":">=11.10.0"},"bin":{"webscrapper":"src/commands/scrape.js"},"types":"src/index.d.ts","type":"module","private":false,"scripts":{"scrape":"node src/commands/scrape.js","list-presets":"node src/commands/list-presets.js","show-preset":"node src/commands/show-preset.js","install-browsers":"npx playwright install","test":"node src/webscrapper.test.js","debug":"PWDEBUG=1 node src/commands/scrape.js"},"keywords":["webscraping","playwright","text-extraction"],"author":"","license":"MIT","dependencies":{"playwright":"^1.40.0"},"devDependencies":{},"gitHead":"0dcf4798af5ab1a3c9f79354a4bc08d3282d79fd","_id":"@danilidonbeltran/webscrapper@4.0.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-yj8ecwFtmjTjGl2kiSbJWxAhxiZW9siKtmMaH2h3oCO1Y8iCQnKo3ecxojRNSGHpkS0iab+cC62V0M2EFP8H9Q==","shasum":"fc3eced99a84a1a56b99add9cc3459c6c58545eb","tarball":"https://registry.npmjs.org/@danilidonbeltran/webscrapper/-/webscrapper-4.0.0.tgz","fileCount":22,"unpackedSize":97798,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCF/2zQK214G91trNi5BYQOYBaGNQIu0fsni8GOGuV20QIhAPY2bNpjVDTkJ25nlbGHYBmRtjG6iRJ5CbgsrlSYCx5h"}]},"_npmUser":{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"},"directories":{},"maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/webscrapper_4.0.0_1787322056619_0.2602572316870715"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-15T13:24:33.876Z","modified":"2026-08-21T14:20:56.943Z","1.0.2":"2025-10-15T13:24:34.161Z","1.1.0":"2025-10-15T13:27:46.966Z","1.2.0":"2025-10-16T13:37:27.229Z","1.3.0":"2025-10-17T08:28:46.438Z","1.4.0":"2025-10-17T10:17:21.245Z","1.4.1":"2025-10-17T12:22:13.657Z","1.4.2":"2025-10-20T16:05:55.515Z","1.5.0":"2025-10-20T21:16:11.655Z","1.6.0":"2025-10-20T21:36:09.321Z","1.7.0":"2025-11-06T12:04:36.680Z","1.8.0":"2025-11-10T09:30:22.413Z","1.9.0":"2025-11-12T13:57:47.413Z","1.9.1":"2025-11-12T14:01:47.327Z","1.9.2":"2026-04-23T11:52:01.369Z","2.0.0":"2026-04-23T12:25:18.283Z","2.1.0":"2026-04-23T12:48:20.962Z","2.2.0":"2026-05-04T07:01:41.894Z","2.2.1":"2026-05-04T07:19:27.846Z","2.3.0":"2026-06-05T10:57:49.244Z","2.3.1":"2026-06-10T11:58:21.864Z","3.0.0":"2026-08-09T14:50:04.523Z","4.0.0":"2026-08-21T14:20:56.787Z"},"license":"MIT","keywords":["webscraping","playwright","text-extraction"],"description":"A web scraper using Playwright to extract all text content from websites","maintainers":[{"name":"danilidonbeltran","email":"danilidonbeltran@gmail.com"}],"readme":"# 🕷️ Web Scraper with Playwright\n\nA production-ready web scraping solution built with Playwright that extracts text content from websites with multiple operation modes and intelligent content filtering.\n\n## ✨ Features\n\n- **Multi-browser support** (Chromium, Firefox, WebKit)\n- **Unified CLI** - Auto-detects operation mode (single URL, bulk, or preset-based)\n- **JavaScript rendering** - Handles dynamic content\n- **Structured extraction** - Headings, paragraphs, links, lists, images\n- **Bulk processing** - Scrape multiple URLs efficiently with rate limiting\n- **Configuration presets** - Optimized for news, blogs, docs, e-commerce\n- **Pre-scrape plugins** - Run custom Playwright code before extraction\n- **Multiple output formats** - JSON, TXT, CSV\n- **Content grouping** - Group results by CSS selectors\n- **Error handling** - Robust error recovery and retry mechanisms\n\n## 🚀 Quick Start\n\n```bash\n# Install dependencies\nnpm install\n\n# Install browser binaries\nnpm run install-browsers\n\n# Basic scraping\nnpm run scrape \"https://example.com\"\n\n# Structured extraction\nnpm run scrape \"https://example.com\" -- --structured --output results.json\n\n# Run tests\nnpm test\n```\n\n## 📖 Usage\n\n### Single URL Scraping\n\n```bash\n# Basic text extraction\nnpm run scrape \"https://example.com\"\n\n# Structured content (headings, links, paragraphs, lists)\nnpm run scrape \"https://example.com\" -- --structured\n\n# Group structured content\nnpm run scrape \"https://news-site.com\" -- --structured --group-by \"article\"\n\n# Run a JavaScript plugin before scraping\nnpm run scrape \"https://example.com\" -- --plugin-file plugin-example.js\n\n# Use different browser\nnpm run scrape \"https://example.com\" -- --browser firefox\n\n# Debug mode (visible browser)\nnpm run scrape \"https://example.com\" -- --no-headless\n```\n\n### Bulk Scraping\n\n```bash\n# Multiple URLs\nnpm run scrape \"https://site1.com\" \"https://site2.com\" -- --structured\n\n# From file\nnpm run scrape -- --file urls.txt --output results.json\n\n# Custom batch processing\nnpm run scrape -- --file urls.txt --batch-size 3 --delay 2000 --format csv\n```\n\n### Preset-based Scraping\n\n```bash\n# List available presets\nnpm run list-presets\n\n# Show preset details\nnpm run show-preset news\n\n# Use preset (news, blog, ecommerce, documentation)\nnpm run scrape -- --preset news \"https://news-site.com\" --output articles.json\n```\n\n#### Available Presets\n\n- **news** - News articles (excludes related articles, newsletters, ads)\n- **blog** - Blog posts (excludes author bio, related posts, comments)\n- **ecommerce** - Product pages (excludes reviews, recommendations, cart)\n- **documentation** - Technical docs (excludes edit buttons, breadcrumbs, navigation)\n\n\n### Programmatic Usage\n\n```javascript\nimport { WebScraper } from './src/scraper.js';\n\n// Basic usage\nconst scraper = new WebScraper();\nconst result = await scraper.scrapeText('https://example.com');\nconsole.log(result.text);\nawait scraper.close();\n\n// With custom configuration\nconst customScraper = new WebScraper({\n  browser: 'chromium',\n  headless: true,\n  timeout: 30000,\n  waitUntil: 'domcontentloaded',   // Navigation wait strategy (default: 'domcontentloaded')\n  excludeSelectors: ['script', 'style', '.ads', 'nav', 'footer'],\n  followPermanentRedirect: false,  // Don't follow permanent redirects 301/308 (default: true)\n  followTemporaryRedirect: false,  // Don't follow temporary redirects 302/303/307 (default: true)\n  plugin: async (page) => {\n    await page.click('a');\n    await page.waitForTimeout(1000);\n    await page.hover('#example-domains');\n  }\n});\n\n// Structured extraction\nconst structured = await scraper.scrapeTextStructured('https://example.com');\nconsole.log(structured.headings, structured.links);\n\n// Named groups\nconst groupScraper = new WebScraper({\n  groups: [\n    { selector: 'article', required: true, wait: true, name: 'article' },\n    { selector: '.article-content', required: false, wait: false, name: 'content' }\n  ]\n});\nconst groupedResult = await groupScraper.scrapeTextStructured('https://news-site.com/article');\nconsole.log(groupedResult.groups); // Array of matched groups\n```\n\n### Using Presets Programmatically\n\n```javascript\nimport { ConfigurableScraper } from './src/configurable-scraper.js';\n\nconst scraper = new ConfigurableScraper();\nconst result = await scraper.scrapeWithPreset(\n  'https://news-site.com', \n  'news',\n  { structured: true }\n);\n```\n\n### Bulk Processing\n\n```javascript\nimport { BulkScraper } from './src/bulk-scraper.js';\n\nconst bulkScraper = new BulkScraper();\nconst results = await bulkScraper.scrapeUrls(urls, {\n  batchSize: 3,\n  delay: 2000,\n  structured: true,\n  outputFormat: 'json'\n});\n```\n\n## 🎯 Advanced Features\n\n### Pre-scrape Plugin\n\nPass a `plugin` function to run custom Playwright code on every URL. The function receives the real Playwright [`Page`](https://playwright.dev/docs/api/class-page) object and can click controls, fill forms, wait for dynamic content, navigate, or modify the DOM.\n\n```javascript\nconst scraper = new WebScraper({\n  plugin: async (page) => {\n    await page.getByRole('button', { name: 'Accept cookies' }).click();\n    await page.fill('#search', 'Playwright');\n    await page.press('#search', 'Enter');\n    await page.waitForSelector('.search-results');\n  }\n});\n```\n\nThe plugin is awaited once per scraped URL after `page.goto()`, before groups with `wait` enabled are awaited and content is extracted. If it throws, that scrape fails with the same error. Handle optional actions inside the plugin when they should not abort scraping:\n\n```javascript\nplugin: async (page) => {\n  try {\n    await page.click('#optional-banner-close', { timeout: 2000 });\n  } catch {\n    // The banner was not present; continue scraping.\n  }\n}\n```\n\nFor CLI usage, create an `.mjs` ES module whose default export is the plugin function. The `.mjs` extension keeps the plugin in ESM format even when your project uses `\"type\": \"commonjs\"`:\n\n```javascript\n// plugin.mjs\nexport default async function plugin(page) {\n  await page.click('#expand');\n  await page.waitForTimeout(1000);\n}\n```\n\nFor CommonJS, create a `.cjs` file and assign the plugin function directly to `module.exports`:\n\n```javascript\n// plugin.cjs\nmodule.exports = async function plugin(page) {\n  await page.click('#expand');\n  await page.waitForTimeout(1000);\n};\n```\n\nThen pass either trusted local script with `--plugin-file`:\n\n```bash\n# ES module\nnpm run scrape \"https://example.com\" -- --plugin-file ./plugin.mjs\n\n# CommonJS\nnpm run scrape \"https://example.com\" -- --plugin-file ./plugin.cjs\n```\n\nPlugin files execute as local JavaScript with the permissions of the CLI process, so only load code you trust.\n\n### Redirect Handling\n\nControl how the scraper handles HTTP redirects independently for permanent (301, 308) and temporary (302, 303, 307) redirects:\n\n```javascript\nimport { WebScraper, RedirectError } from './src/scraper.js';\n\n// Throw on all redirects\nconst scraper = new WebScraper({\n  followPermanentRedirect: false,  // Don't follow 301/308 (default: true)\n  followTemporaryRedirect: false   // Don't follow 302/303/307 (default: true)\n});\n\n// Follow permanent redirects only\nconst permanentOnlyScraper = new WebScraper({\n  followPermanentRedirect: true,\n  followTemporaryRedirect: false\n});\n\ntry {\n  const result = await scraper.scrapeText('https://example.com/old-page');\n  // Normal scraping if no redirect\n  console.log(result.text);\n} catch (error) {\n  // Redirect detected - throws RedirectError\n  if (error instanceof RedirectError) {\n    console.log(`Redirect ${error.status}: ${error.originalUrl} -> ${error.location}`);\n    console.log(error.message);\n    // error.status - HTTP status code (301, 302, etc.)\n    // error.location - redirect target URL\n    // error.originalUrl - original URL that redirected\n    // error.timestamp - ISO timestamp\n  }\n}\n```\n\n**Use cases:**\n- ✅ Detect moved or deprecated URLs\n- ✅ Track redirect chains in bulk operations\n- ✅ Validate URL structure without following redirects\n- ✅ Audit SEO redirect configurations\n\n### Named Groups\n\n`groups` accepts objects with a CSS `selector`, a stable output `name`, a `required` flag, and a `wait` flag. `wait` defaults to `true`; set it to `false` to sample the group without a selector-specific wait. `required` defaults to `false`. A missing required group throws a standard `Error`, while a missing optional group returns its `name` as `id`, a `null` title, and empty content collections.\n\nIf one selector matches several elements, their IDs use the group name followed by a number: `article`, `article-2`, and so on.\n\n```javascript\nconst scraper = new WebScraper({\n  groups: [\n    { selector: 'article', required: true, wait: true, name: 'article' },\n    { selector: '.article-content', required: false, wait: false, name: 'content' }\n  ]\n});\n\nconst result = await scraper.scrapeTextStructured('https://news-site.com/article');\n// Waiting is enabled by default. Missing required groups throw;\n// missing optional groups return empty group values.\n```\n\nThis is useful when:\n- Required page content renders asynchronously\n- You want to capture multiple content groups without failing on missing ones\n- Content is split across various semantic elements\n\n**Benefits:**\n- ✅ More flexible scraping across different page layouts\n- ✅ Combine multiple content areas (e.g., main article + sidebars)\n\n### Navigation Wait Strategy (`waitUntil`)\n\nControl when Playwright considers navigation complete. Useful for pages that load content at different stages:\n\n| Value | Wait for | Best for |\n|-------|----------|----------|\n| `'domcontentloaded'` | HTML parsed, DOM ready (default) | Most pages — fast and reliable |\n| `'load'` | All resources (images, scripts, stylesheets) | Pages where initial layout matters |\n| `'networkidle'` | No network activity for 500ms | Heavy SPAs that fetch data on load |\n| `'commit'` | First byte received | Fast link-following / redirect detection |\n\n```javascript\n// Default — fastest, works for most pages\nconst scraper = new WebScraper({ waitUntil: 'domcontentloaded' });\n\n// Wait for all assets (images, fonts, etc.)\nconst scraper = new WebScraper({ waitUntil: 'load' });\n\n// Wait for API calls to finish on a SPA\nconst scraper = new WebScraper({ waitUntil: 'networkidle' });\n```\n\n**Tips:**\n- `'domcontentloaded'` is the default — prefer it unless content is missing.\n- Use `'networkidle'` for SPAs that render after async data fetches, but expect slower scraping.\n- Use `groups` to name output groups and independently control waiting and required behavior.\n\n## 📊 Output Formats\n\n### JSON (default)\n```json\n{\n  \"url\": \"https://example.com\",\n  \"text\": \"Extracted content...\",\n  \"length\": 1234,\n  \"timestamp\": \"2025-10-10T10:00:00.000Z\"\n}\n```\n\n### Structured JSON (--structured flag)\n```json\n{\n  \"url\": \"https://example.com\",\n  \"title\": \"Page Title\",\n  \"headings\": {\"h1\": [\"Main\"], \"h2\": [\"Sub1\", \"Sub2\"]},\n  \"paragraphs\": [\"Text...\"],\n  \"links\": [{\"text\": \"Link\", \"href\": \"https://...\"}],\n  \"lists\": [{\"type\": \"ul\", \"items\": [\"Item 1\"]}],\n  \"images\": [{\"alt\": \"Desc\", \"src\": \"https://...\"}]\n}\n```\n\n### CSV (--format csv)\nComma-separated values with headers for bulk operations.\n\n### TXT (--format txt)\nPlain text concatenation for simple text output.\n\n\n## 🛠️ CLI Command Reference\n\n```bash\n# Basic commands\nnpm run scrape \"URL\"                          # Basic scraping\nnpm run scrape \"URL\" -- --structured          # Structured extraction\nnpm run scrape \"URL\" -- --output file.json    # Save to file\n\n# Advanced options\nnpm run scrape \"URL\" -- --browser firefox        # Use Firefox\nnpm run scrape \"URL\" -- --no-headless            # Show browser\nnpm run scrape \"URL\" -- --timeout 60000          # 60s timeout\nnpm run scrape \"URL\" -- --group-by \"selector\"    # Group content\nnpm run scrape \"URL\" -- --plugin-file plugin.mjs # Run a pre-scrape plugin\n\n# Bulk operations\nnpm run scrape \"URL1\" \"URL2\"                  # Multiple URLs\nnpm run scrape -- --file urls.txt --batch-size 3 # Custom batching\nnpm run scrape -- --file urls.txt --delay 2000   # 2s delay\n\n# Preset operations\nnpm run list-presets                          # List presets\nnpm run show-preset news                      # Show preset config\nnpm run scrape -- --preset news \"URL\"         # Use preset\n```\n\n## Migrating from v3 to v4\n\nVersion 4 replaces the `sectionSelectors` string array with named `groups`, renames the structured result field from `sections` to `groups`, and removes the standalone `waitForSelector` option. Each group now controls its own waiting and missing-selector behavior.\n\nBefore (v3):\n\n```javascript\nconst scraper = new WebScraper({\n  waitForSelector: '.article-ready',\n  sectionSelectors: ['article', '.sidebar']\n});\n\nconst result = await scraper.scrapeTextStructured(url);\nconsole.log(result.sections);\n```\n\nAfter (v4):\n\n```javascript\nconst scraper = new WebScraper({\n  groups: [\n    {\n      name: 'article',\n      selector: 'article',\n      wait: true,\n      required: true\n    },\n    {\n      name: 'sidebar',\n      selector: '.sidebar',\n      wait: false,\n      required: false\n    }\n  ]\n});\n\nconst result = await scraper.scrapeTextStructured(url);\nconsole.log(result.groups);\n```\n\nGroup fields work as follows:\n\n| Field | Default | Behavior |\n|-------|---------|----------|\n| `selector` | Required | CSS selector used to locate the group content. |\n| `name` | `selector` | Stable group `id` in the result. Multiple matches use `name-2`, `name-3`, and so on. |\n| `wait` | `true` | Wait up to the scraper `timeout` before extraction. Set to `false` to check without a selector-specific wait. |\n| `required` | `false` | When `true`, throw a standard `Error` if missing. Otherwise return an empty group. |\n\n### Replacing `waitForSelector`\n\nThe `waitForSelector` constructor option and `--wait-for-selector` CLI flag no longer exist. If the selector represents content you want in structured output, make it a group:\n\n```javascript\nconst scraper = new WebScraper({\n  groups: [\n    { name: 'article', selector: '.article-ready', wait: true, required: true }\n  ]\n});\n```\n\nIf the selector is only a page-readiness signal, or you use `scrapeText`, wait in a plugin instead. Groups are only processed by `scrapeTextStructured`:\n\n```javascript\nconst scraper = new WebScraper({\n  plugin: async (page) => {\n    await page.waitForSelector('.article-ready');\n  }\n});\n```\n\n### Migrating fallback selectors\n\nGroups are independent output slots. If the old array contained alternative selectors for the same content, combine them into one CSS selector so any match satisfies the group:\n\n```javascript\nconst scraper = new WebScraper({\n  groups: [\n    {\n      name: 'article',\n      selector: 'article, .article-content, .post-content',\n      wait: true,\n      required: true\n    }\n  ]\n});\n```\n\n### Removed errors and CLI behavior\n\n`SelectorTimeoutError` and `SectionNotFoundError` were removed. Missing required groups now throw a standard `Error`; missing optional groups return empty group data. Remove imports and `instanceof` checks for those custom classes.\n\nThe `--group-by <selector>` CLI option remains available. Each CLI selector is converted to a group whose `name` is the selector and whose `wait` and `required` values are both `true`. Remove any use of `--wait-for-selector`.\n\n## Migrating from v2 to v3\n\nVersion 3.0.0 replaces the declarative `interactionSteps` option with the `plugin` callback. Move each old step into an awaited Playwright call on the supplied `Page`.\n\nBefore (v2):\n\n```javascript\nconst scraper = new WebScraper({\n  interactionSteps: [\n    { event: 'click', target: '#expand', wait: 1000, timeout: 5000 },\n    { event: 'mouseover', target: '#info', required: false }\n  ]\n});\n```\n\nAfter (v3):\n\n```javascript\nconst scraper = new WebScraper({\n  plugin: async (page) => {\n    await page.click('#expand', { timeout: 5000 });\n    await page.waitForTimeout(1000);\n\n    try {\n      await page.hover('#info');\n    } catch {\n      // Equivalent to required: false.\n    }\n  }\n});\n```\n\nUse these direct equivalents when migrating events:\n\n| v2 event | v3 plugin call |\n|----------|----------------|\n| `click` | `await page.click(target, { timeout })` |\n| `dblclick` | `await page.dblclick(target, { timeout })` |\n| `mouseover` or `hover` | `await page.hover(target, { timeout })` |\n| `focus` | `await page.focus(target, { timeout })` |\n| `fill` | `await page.fill(target, value, { timeout })` |\n| `type` | `await page.locator(target).pressSequentially(value, { timeout })` |\n| `press` | `await page.press(target, value, { timeout })` |\n\nThe old `wait` field becomes `await page.waitForTimeout(wait)`, and per-step `timeout` values move into the relevant Playwright call. Wrap optional actions in `try/catch`; v3 no longer returns `interactionWarnings`. The `InteractionStepError`, `InteractionStep`, `InteractionWarning`, and `InteractionEvent` exports have also been removed, and plugin errors now propagate unchanged.\n\nFor the CLI, replace the v2 JSON file and flag:\n\n```bash\nnpm run scrape \"URL\" -- --interaction-steps-file interactions.json\n```\n\nwith a JavaScript module that default exports the callback and the v3 flag:\n\n```bash\nnpm run scrape \"URL\" -- --plugin-file plugin.mjs\n```\n\n## 🚦 Best Practices\n\n1. **Be respectful** - Use delays between requests (`--delay 2000`)\n2. **Handle errors** - Always use try-catch blocks in code\n3. **Close resources** - Call `await scraper.close()`\n4. **Use presets** - Leverage optimized configurations\n5. **Check robots.txt** - Respect website policies\n6. **Test first** - Try single URL before bulk operations\n7. **Save important results** - Use `--output` flag\n8. **Optimize performance** - Use headless mode and appropriate batch sizes\n\n## 🔍 Troubleshooting\n\n### Common Issues\n\n| Issue | Solution |\n|-------|----------|\n| Timeout errors | Increase timeout: `--timeout 60000` |\n| Empty results | Configure a structured `group` or wait in a plugin |\n| Browser crashes | Reduce batch size: `--batch-size 2` |\n| Memory issues | Process fewer URLs at once |\n| Preset not found | Run `npm run list-presets` |\n\n## 📄 License\n\nMIT License - Feel free to use in your projects!\n\n---\n","readmeFilename":"README.md"}