├── .gitignore ├── README.md ├── assets ├── LinkedIn_Logo.svg.png ├── cover.png └── gif.gif ├── back ├── data.json └── main.js ├── front ├── index.html └── style.css ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # linkeBot🤖 2 | ![cover](./assets/cover.png) 3 | ![gif](./assets/gif.gif) 4 | 5 | ![](https://img.shields.io/badge/linkeBot-Node-green) ![](https://img.shields.io/badge/Scrapper-Pupperteer-blue) 6 | 7 | ### 🎛️ Dependencias 8 | 9 | - [Puppeteer](https://pptr.dev/) - Scrapper 10 | 11 | 12 | ### 🎯 Objetivo 13 | Estudando web scrapping surgiu a ideia de criar um bot que faça uma busca por vagas de determinado ramo no LinkedIn. 14 | 15 | 16 | ### ⌨️ Como foi feito? 17 | 18 | A ideia inicial era varrer uma URL especifica e capturar todos os elementos HTML que estivessem uma condição. Essa condição foi que o bot retornasse elementos que fossem `` que estivessem dentro de `
`, porém essa primeira busca trouxe muitos elementos que não faziam sentido como: 19 | - Areas de login 20 | - Botões de navegação 21 | 22 | E para corrigir isso foi criado um filtro nos elementos retornado que tivessem palavras específicas como *'dev', 'front-end'* e etc. 23 | 24 | ### 🔎 Como utilizar 25 | 26 | - `git clone` no link do repositório 27 | - Instalado em sua máquina você precisará instalar as dependencias do projeto. 28 | - `npm install` 29 | - Execute o arquivo `main.js` direto no node ou no terminal. 30 | - Após a primeira execução, abra o arquivo `index.html` 31 | 32 | 33 | 34 | ### 🔧 Próximos passos 35 | 36 | - Adicionar paginação 37 | - Mais condições de filtros 38 | 39 | 40 | ### 🎨 Autor 41 | 42 | [LinkedIn](https://www.linkedin.com/in/fabiodeandrad/) 43 | [Medium](https://medium.com/@fabioscript) 44 | [E-mail](fabiodeandradecontato@gmail.com) 45 | -------------------------------------------------------------------------------- /assets/LinkedIn_Logo.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiodeandrade/linkeBot/9657f35e71506b0a1ef3233b3b2a061d5b87a735/assets/LinkedIn_Logo.svg.png -------------------------------------------------------------------------------- /assets/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiodeandrade/linkeBot/9657f35e71506b0a1ef3233b3b2a061d5b87a735/assets/cover.png -------------------------------------------------------------------------------- /assets/gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiodeandrade/linkeBot/9657f35e71506b0a1ef3233b3b2a061d5b87a735/assets/gif.gif -------------------------------------------------------------------------------- /back/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "href": "https://br.linkedin.com/jobs/view/pessoa-desenvolvedora-ios-at-south-system-3096553462?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=dlWpj8v3IbviBLTrBJWw0g%3D%3D&position=1&pageNum=0&trk=public_jobs_jserp-result_search-card", 4 | "innerText": "Pessoa Desenvolvedora iOS" 5 | }, 6 | { 7 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-zoppy-3075941818?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=zcEBzLNC8UM70xDHKYnigg%3D%3D&position=2&pageNum=0&trk=public_jobs_jserp-result_search-card", 8 | "innerText": "Desenvolvedor de back end" 9 | }, 10 | { 11 | "href": "https://br.linkedin.com/jobs/view/backend-engineer-at-rapchat-3086677044?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=ey68Fd8FEq7s1UTAc0Vgow%3D%3D&position=3&pageNum=0&trk=public_jobs_jserp-result_search-card", 12 | "innerText": "Backend Engineer" 13 | }, 14 | { 15 | "href": "https://br.linkedin.com/jobs/view/python-developer-m-f-at-bridge351-3051477915?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=%2BHAZRZvF09la6X9vdUhVFA%3D%3D&position=4&pageNum=0&trk=public_jobs_jserp-result_search-card", 16 | "innerText": "Python Developer (m/f)" 17 | }, 18 | { 19 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-ecobonuz-3090786804?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=u9culTaLwrpZvB9xh5ANKA%3D%3D&position=5&pageNum=0&trk=public_jobs_jserp-result_search-card", 20 | "innerText": "Desenvolvedor de Back End" 21 | }, 22 | { 23 | "href": "https://br.linkedin.com/jobs/view/software-engineer-back-end-at-emcasa-3051726470?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=bLr3hqe49PAE5jUCXz6yaw%3D%3D&position=6&pageNum=0&trk=public_jobs_jserp-result_search-card", 24 | "innerText": "Software Engineer Back End" 25 | }, 26 | { 27 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-python-at-cedro-technologies-2998365147?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=S3bG%2BuyoFohiY0w8WQ3BUw%3D%3D&position=7&pageNum=0&trk=public_jobs_jserp-result_search-card", 28 | "innerText": "Desenvolvedor (a) Python" 29 | }, 30 | { 31 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-python-at-bcf-solutions-3085014297?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=L8XLqKqF7gWCZLe957eKaA%3D%3D&position=8&pageNum=0&trk=public_jobs_jserp-result_search-card", 32 | "innerText": "Desenvolvedor Python" 33 | }, 34 | { 35 | "href": "https://br.linkedin.com/jobs/view/engenheiro-de-software-fullstack-c%23-at-audens-group-3092496032?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=RD%2FKRBlwrYguqD28k%2BTUpw%3D%3D&position=9&pageNum=0&trk=public_jobs_jserp-result_search-card", 36 | "innerText": "Engenheiro de Software Fullstack C#" 37 | }, 38 | { 39 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-helpet-3083874021?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=7Ifl%2BlOyFXiMWFFXSfenZw%3D%3D&position=10&pageNum=0&trk=public_jobs_jserp-result_search-card", 40 | "innerText": "Desenvolvedor de back end" 41 | }, 42 | { 43 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-software-c%2B%2B-junior-ou-pleno-at-mec%C3%A2nica-avan%C3%A7ada-dma-ind-e-tecnologia-3066107031?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=zDOBy7aDAKPoQdvN4wZuLA%3D%3D&position=11&pageNum=0&trk=public_jobs_jserp-result_search-card", 44 | "innerText": "Desenvolvedor de Software C++ Junior ou Pleno" 45 | }, 46 | { 47 | "href": "https://br.linkedin.com/jobs/view/staff-engineer-at-hellofresh-3051472315?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=DpuYRaXAUwsOtEI3ADOTMA%3D%3D&position=12&pageNum=0&trk=public_jobs_jserp-result_search-card", 48 | "innerText": "Staff Engineer" 49 | }, 50 | { 51 | "href": "https://br.linkedin.com/jobs/view/pessoa-desenvolvedora-de-back-end-plena-at-compensa-3073974029?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=K2ITaOGbbMCBv9kNLZNRWQ%3D%3D&position=13&pageNum=0&trk=public_jobs_jserp-result_search-card", 52 | "innerText": "Pessoa desenvolvedora de Back-End plena" 53 | }, 54 | { 55 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-node-js-at-geekhunter-3096353955?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=TKHDZMVhfDR6cIMDjHBpRQ%3D%3D&position=14&pageNum=0&trk=public_jobs_jserp-result_search-card", 56 | "innerText": "Desenvolvedor(a) Back-end Node.js" 57 | }, 58 | { 59 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-back-end-j%C3%BAnior-at-paylivre-3090932194?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=u98EVJJZ4f6gdnQv5gzXnA%3D%3D&position=15&pageNum=0&trk=public_jobs_jserp-result_search-card", 60 | "innerText": "Desenvolvedor Back End Júnior" 61 | }, 62 | { 63 | "href": "https://br.linkedin.com/jobs/view/programador-backend-at-scoutfy-3072963639?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=ewFWbSZvDV%2BSJuLjMnZSfQ%3D%3D&position=16&pageNum=0&trk=public_jobs_jserp-result_search-card", 64 | "innerText": "Programador Backend" 65 | }, 66 | { 67 | "href": "https://br.linkedin.com/jobs/view/react-front-end-engineer-remote-latam-at-loadsmart-3092997805?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=HahiA6XogWfK7sLDLE9lqg%3D%3D&position=17&pageNum=0&trk=public_jobs_jserp-result_search-card", 68 | "innerText": "React Front End Engineer (Remote-LatAm)" 69 | }, 70 | { 71 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-brave-ag-3058125404?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=x5cvqp1S0LclUSOvOvtOgg%3D%3D&position=18&pageNum=0&trk=public_jobs_jserp-result_search-card", 72 | "innerText": "Desenvolvedor de back end" 73 | }, 74 | { 75 | "href": "https://br.linkedin.com/jobs/view/back-end-developer-at-totalpass-brasil-3094823731?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=lcX2Ofeq0%2FuXzz92UHrhUg%3D%3D&position=19&pageNum=0&trk=public_jobs_jserp-result_search-card", 76 | "innerText": "Back End Developer" 77 | }, 78 | { 79 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-full-stack-c%23-at-millenium-brasil-3092787117?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=PF%2Bu6N1O1Tfe6ZHF4KDtdw%3D%3D&position=20&pageNum=0&trk=public_jobs_jserp-result_search-card", 80 | "innerText": "Desenvolvedor Full Stack C#\nMillenium Brasil\nAgudos, SP\nSeja um dos primeiros a se candidatar\nHá 1 dia" 81 | }, 82 | { 83 | "href": "https://br.linkedin.com/jobs/view/senior-software-development-engineer-in-test-brazil-at-enova-international-2931494309?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=ec%2Bk55gYTmxd85hHnch6LQ%3D%3D&position=21&pageNum=0&trk=public_jobs_jserp-result_search-card", 84 | "innerText": "Senior Software Development Engineer in Test (Brazil)" 85 | }, 86 | { 87 | "href": "https://br.linkedin.com/jobs/view/backend-python-developer-at-eureciclo-3093281657?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=JS%2FiFgejBEpaTONCUGVLYQ%3D%3D&position=22&pageNum=0&trk=public_jobs_jserp-result_search-card", 88 | "innerText": "Backend Python Developer" 89 | }, 90 | { 91 | "href": "https://br.linkedin.com/jobs/view/analista-devops-at-foursys-3077008995?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=bE4KcnEBRel2q6dvvZ7q0w%3D%3D&position=23&pageNum=0&trk=public_jobs_jserp-result_search-card", 92 | "innerText": "Analista Devops" 93 | }, 94 | { 95 | "href": "https://br.linkedin.com/jobs/view/data-engineer-quantumblack-at-quantumblack-ai-by-mckinsey-3060552362?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=v44TabiWZwtOWj0rFbVsYg%3D%3D&position=24&pageNum=0&trk=public_jobs_jserp-result_search-card", 96 | "innerText": "Data Engineer - QuantumBlack" 97 | }, 98 | { 99 | "href": "https://br.linkedin.com/jobs/view/engenheiro-a-backend-net-remoto-at-grupo-dream-work-3090803414?refId=oJ1eC1IbBshSJZw2u6tM9w%3D%3D&trackingId=wSD0OQ0TollYxejDkMycrQ%3D%3D&position=25&pageNum=0&trk=public_jobs_jserp-result_search-card", 100 | "innerText": "Engenheiro (a) Backend .Net (Remoto)" 101 | }, 102 | { 103 | "href": "https://br.linkedin.com/jobs/view/engenheiro-a-backend-net-remoto-at-grupo-dream-work-3090803414?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=LtjuMyyzJh6ZB5cDqXr77Q%3D%3D&position=1&pageNum=1&trk=public_jobs_jserp-result_search-card", 104 | "innerText": "Engenheiro (a) Backend .Net (Remoto)" 105 | }, 106 | { 107 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-java-pleno-remoto-at-geekhunter-3096357489?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=UVCrpmnRrOypGut3q2SMIw%3D%3D&position=2&pageNum=1&trk=public_jobs_jserp-result_search-card", 108 | "innerText": "Desenvolvedor(a) Back-end Java pleno (remoto)" 109 | }, 110 | { 111 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-back-end-python-at-novatics-3049947281?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=5H2qW3QEmBxMqu63%2BgG82A%3D%3D&position=3&pageNum=1&trk=public_jobs_jserp-result_search-card", 112 | "innerText": "Desenvolvedor Back-End (Python)" 113 | }, 114 | { 115 | "href": "https://br.linkedin.com/jobs/view/developer-java-back-end-jr-at-ci-t-3084752915?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=z%2BPvYQwtyuZZRlKbgdcR7Q%3D%3D&position=4&pageNum=1&trk=public_jobs_jserp-result_search-card", 116 | "innerText": "Developer Java Back End Jr" 117 | }, 118 | { 119 | "href": "https://br.linkedin.com/jobs/view/backend-developer-at-mundial-digital-group-3088545858?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=IGdHr4%2B62Y9IdpSvB3ddeg%3D%3D&position=5&pageNum=1&trk=public_jobs_jserp-result_search-card", 120 | "innerText": "Backend Developer" 121 | }, 122 | { 123 | "href": "https://br.linkedin.com/jobs/view/backend-software-engineer-golang-at-rocket-chat-3084965134?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=PaIfbG%2BnQAdFLky0zKIutw%3D%3D&position=6&pageNum=1&trk=public_jobs_jserp-result_search-card", 124 | "innerText": "Backend Software Engineer (Golang)" 125 | }, 126 | { 127 | "href": "https://br.linkedin.com/jobs/view/senior-frontend-software-engineer-partners-at-gympass-3064439636?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=nMEChOUgYvNIBU6w2lZN9w%3D%3D&position=7&pageNum=1&trk=public_jobs_jserp-result_search-card", 128 | "innerText": "Senior Frontend Software Engineer | Partners" 129 | }, 130 | { 131 | "href": "https://br.linkedin.com/jobs/view/javascript-developer-at-fluxuous-development-agency-3070609263?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=93AhWcibXQlnZK22ra7c6g%3D%3D&position=8&pageNum=1&trk=public_jobs_jserp-result_search-card", 132 | "innerText": "Javascript Developer" 133 | }, 134 | { 135 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-full-stack-developer-at-grgit-consultoria-3090694953?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=dDZ1Tgn%2BRFTiHGi16Af7vQ%3D%3D&position=9&pageNum=1&trk=public_jobs_jserp-result_search-card", 136 | "innerText": "Desenvolvedor Full Stack Developer\nGrgit Consultoria\nCuritiba, PR\nSeja um dos primeiros a se candidatar\nHá 3 dias" 137 | }, 138 | { 139 | "href": "https://br.linkedin.com/jobs/view/senior-back-end-software-engineer-php-at-cloudbeds-2896525382?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=WURnsyBPjNeruS74zrmsCg%3D%3D&position=10&pageNum=1&trk=public_jobs_jserp-result_search-card", 140 | "innerText": "Senior Back End Software Engineer - PHP" 141 | }, 142 | { 143 | "href": "https://br.linkedin.com/jobs/view/pessoa-desenvolvedora-fullstack-jr-pl-at-hst-card-technology-3096205836?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=GcKP2C8lWCDdnpc%2FMfNkwA%3D%3D&position=11&pageNum=1&trk=public_jobs_jserp-result_search-card", 144 | "innerText": "Pessoa Desenvolvedora Fullstack (Jr/Pl)" 145 | }, 146 | { 147 | "href": "https://br.linkedin.com/jobs/view/software-development-engineer-1-at-wex-3021411028?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=R2BTwWsMPRi9m5gglo0KSQ%3D%3D&position=12&pageNum=1&trk=public_jobs_jserp-result_search-card", 148 | "innerText": "Software Development Engineer 1" 149 | }, 150 | { 151 | "href": "https://br.linkedin.com/jobs/view/software-engineer-back-end-at-destrava-a%C3%AD-3086088848?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=3QVioCNRG7FbpqnzN39KvQ%3D%3D&position=13&pageNum=1&trk=public_jobs_jserp-result_search-card", 152 | "innerText": "Software Engineer - Back End" 153 | }, 154 | { 155 | "href": "https://br.linkedin.com/jobs/view/software-development-engineer-at-wex-3076209740?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=BAGVE1RI9uhBXUBGzkX7gw%3D%3D&position=14&pageNum=1&trk=public_jobs_jserp-result_search-card", 156 | "innerText": "Software Development Engineer" 157 | }, 158 | { 159 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-front-end-react-at-farisco-3090812653?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=SuksG5%2Bt2VZyuvmnsSbK3g%3D%3D&position=15&pageNum=1&trk=public_jobs_jserp-result_search-card", 160 | "innerText": "Desenvolvedor Front-end React" 161 | }, 162 | { 163 | "href": "https://br.linkedin.com/jobs/view/backend-software-engineer-node-js-at-digital-republic-3084349688?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=TlQANBaewo2ipCwUkfxjFQ%3D%3D&position=16&pageNum=1&trk=public_jobs_jserp-result_search-card", 164 | "innerText": "Backend Software Engineer - Node Js" 165 | }, 166 | { 167 | "href": "https://br.linkedin.com/jobs/view/backend-software-developer-nodejs-at-digital-republic-3084352184?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=oZZuoaiWxR8dSJOss5d7OA%3D%3D&position=17&pageNum=1&trk=public_jobs_jserp-result_search-card", 168 | "innerText": "Backend Software Developer - NodeJS" 169 | }, 170 | { 171 | "href": "https://br.linkedin.com/jobs/view/software-test-engineer-automation-remote-at-autodesk-3050456044?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=qVV3v0KQEnpV043vybc7xA%3D%3D&position=18&pageNum=1&trk=public_jobs_jserp-result_search-card", 172 | "innerText": "Software Test Engineer (Automation) (Remote)" 173 | }, 174 | { 175 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-via-3094143041?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=BR1D0ZatV%2FYuWOyM%2FCUXuw%3D%3D&position=19&pageNum=1&trk=public_jobs_jserp-result_search-card", 176 | "innerText": "Desenvolvedor de back end" 177 | }, 178 | { 179 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-backend-at-expresso-s%C3%A3o-miguel-3072926725?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=BjV5sSSdjfrEix5B3vN1WQ%3D%3D&position=20&pageNum=1&trk=public_jobs_jserp-result_search-card", 180 | "innerText": "Desenvolvedor Backend" 181 | }, 182 | { 183 | "href": "https://br.linkedin.com/jobs/view/software-engineer-fullstack-at-fanatee-3092738828?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=fTc%2BNwbJ%2F%2BE45YFHL57RRQ%3D%3D&position=21&pageNum=1&trk=public_jobs_jserp-result_search-card", 184 | "innerText": "Software Engineer - Fullstack" 185 | }, 186 | { 187 | "href": "https://br.linkedin.com/jobs/view/software-engineer-backend-at-juni-3091133937?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=JW6IAr4lxR61GUDQQa%2BiHw%3D%3D&position=22&pageNum=1&trk=public_jobs_jserp-result_search-card", 188 | "innerText": "Software Engineer - Backend" 189 | }, 190 | { 191 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-fullstack-at-headoffice-space-3073132774?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=6CQL8NZ6V1mCmil8gI%2FL6w%3D%3D&position=23&pageNum=1&trk=public_jobs_jserp-result_search-card", 192 | "innerText": "Desenvolvedor Fullstack" 193 | }, 194 | { 195 | "href": "https://br.linkedin.com/jobs/view/java-developer-at-agilethought-3069177085?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=4mfKpOH%2FmwtoUZGpj2UiDg%3D%3D&position=24&pageNum=1&trk=public_jobs_jserp-result_search-card", 196 | "innerText": "Java Developer" 197 | }, 198 | { 199 | "href": "https://br.linkedin.com/jobs/view/full-stack-developer-at-extractify-technologies-3090121546?refId=FaGSOvh8VXcXxenzVNbEQA%3D%3D&trackingId=LHGHd1GcoLV7J%2FLkBwAKqw%3D%3D&position=25&pageNum=1&trk=public_jobs_jserp-result_search-card", 200 | "innerText": "Full Stack Developer" 201 | }, 202 | { 203 | "href": "https://br.linkedin.com/jobs/view/analista-de-qa-at-gran-cursos-online-3063011882?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=SPUvmVJnJ2xK%2FU5NTn4%2Fxg%3D%3D&position=1&pageNum=2&trk=public_jobs_jserp-result_search-card", 204 | "innerText": "Analista de QA" 205 | }, 206 | { 207 | "href": "https://br.linkedin.com/jobs/view/senior-software-engineer-%E2%80%93-full-stack-bangkok-based-relocation-provided-at-agoda-3084916309?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=75AmDc%2Fqa7WC%2FmOCB5Qu8w%3D%3D&position=2&pageNum=2&trk=public_jobs_jserp-result_search-card", 208 | "innerText": "Senior Software Engineer – Full Stack (Bangkok based, relocation provided)" 209 | }, 210 | { 211 | "href": "https://br.linkedin.com/jobs/view/data-science-manager-at-offerfit-2927268731?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=YKaMvR7KMrij6HUlIFhSug%3D%3D&position=3&pageNum=2&trk=public_jobs_jserp-result_search-card", 212 | "innerText": "Data Science Manager" 213 | }, 214 | { 215 | "href": "https://br.linkedin.com/jobs/view/staff-engineer-at-hellofresh-3050825468?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=tvZgZoJd%2BGGHDxSmrQfpeA%3D%3D&position=4&pageNum=2&trk=public_jobs_jserp-result_search-card", 216 | "innerText": "Staff Engineer" 217 | }, 218 | { 219 | "href": "https://br.linkedin.com/jobs/view/software-engineer-node-at-turbi-2998368956?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=JlLyDqUJebsFIAjerwbKcg%3D%3D&position=5&pageNum=2&trk=public_jobs_jserp-result_search-card", 220 | "innerText": "Software Engineer - Node" 221 | }, 222 | { 223 | "href": "https://br.linkedin.com/jobs/view/software-engineer-in-test-at-hatchworks-3080467311?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=%2B8%2BO0ZaN8MbdtmAD9QqHEA%3D%3D&position=6&pageNum=2&trk=public_jobs_jserp-result_search-card", 224 | "innerText": "Software Engineer In Test" 225 | }, 226 | { 227 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-front-end-at-sensum-sistemas-3090696179?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=sh2mqDxPVgMlpNj9rpZFhg%3D%3D&position=7&pageNum=2&trk=public_jobs_jserp-result_search-card", 228 | "innerText": "Desenvolvedor Front-End" 229 | }, 230 | { 231 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-back-end-python-sql-pj-at-mayo-consultoria-3090837683?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=HanQx1EFp68Iv51U62ZF0g%3D%3D&position=8&pageNum=2&trk=public_jobs_jserp-result_search-card", 232 | "innerText": "Desenvolvedor Back End Python SQL PJ\nMAYO CONSULTORIA\nSão Paulo, SP\nSeja um dos primeiros a se candidatar\nHá 3 dias" 233 | }, 234 | { 235 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-node-js-at-qesh-3063535067?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=RBfWZXkArP4wmhf68nbq5g%3D%3D&position=9&pageNum=2&trk=public_jobs_jserp-result_search-card", 236 | "innerText": "Desenvolvedor (a) Back-end Node.Js" 237 | }, 238 | { 239 | "href": "https://br.linkedin.com/jobs/view/software-engineer-at-wex-3060610845?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=4NyZ8CXcv6Ehg%2BexUPEfVA%3D%3D&position=10&pageNum=2&trk=public_jobs_jserp-result_search-card", 240 | "innerText": "Software Engineer" 241 | }, 242 | { 243 | "href": "https://br.linkedin.com/jobs/view/pessoa-desenvolvedora-back-end-at-yuca-3080890541?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=dcZvan3y8KLsxSe7Er5Yeg%3D%3D&position=11&pageNum=2&trk=public_jobs_jserp-result_search-card", 244 | "innerText": "Pessoa Desenvolvedora Back-End" 245 | }, 246 | { 247 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-backend-php-s%C3%AAnior-remoto-at-revelo-brasil-3093209041?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=lhvfR%2FE9An2Yc6YJAo8Iaw%3D%3D&position=12&pageNum=2&trk=public_jobs_jserp-result_search-card", 248 | "innerText": "Desenvolvedor Backend - PHP Sênior - Remoto" 249 | }, 250 | { 251 | "href": "https://br.linkedin.com/jobs/view/backend-developer-brazil-at-optibus-3021242277?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=AdwP1idJT%2FeJjANNk2rWRQ%3D%3D&position=13&pageNum=2&trk=public_jobs_jserp-result_search-card", 252 | "innerText": "Backend Developer, Brazil" 253 | }, 254 | { 255 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-fullstack-at-falconi-3091130460?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=QiUxqoFReIxA2WVroNLcnQ%3D%3D&position=14&pageNum=2&trk=public_jobs_jserp-result_search-card", 256 | "innerText": "Desenvolvedor(a) Fullstack" 257 | }, 258 | { 259 | "href": "https://br.linkedin.com/jobs/view/data-engineer-azure-at-datum-ti-3077582585?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=efAjj0Y%2B0r8YBSXruH7KqA%3D%3D&position=15&pageNum=2&trk=public_jobs_jserp-result_search-card", 260 | "innerText": "Data Engineer Azure" 261 | }, 262 | { 263 | "href": "https://br.linkedin.com/jobs/view/software-developer-backend-net-pleno-remoto-at-localiza-3060558467?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=nN3AtEtquGb5PDiB06zTxQ%3D%3D&position=16&pageNum=2&trk=public_jobs_jserp-result_search-card", 264 | "innerText": "SOFTWARE DEVELOPER BACKEND .NET | PLENO (Remoto)" 265 | }, 266 | { 267 | "href": "https://br.linkedin.com/jobs/view/engenheiro-a-de-software-python-at-btg-pactual-3084393646?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=jsLrl0pCKJIjy21Eek%2BCzg%3D%3D&position=17&pageNum=2&trk=public_jobs_jserp-result_search-card", 268 | "innerText": "Engenheiro (a) de Software Python" 269 | }, 270 | { 271 | "href": "https://br.linkedin.com/jobs/view/senior-backend-software-engineer-partners-at-gympass-3096549453?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=wzq%2FCU2rwntSwHkxNR%2BdCg%3D%3D&position=18&pageNum=2&trk=public_jobs_jserp-result_search-card", 272 | "innerText": "Senior Backend Software Engineer | Partners" 273 | }, 274 | { 275 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-node-js-at-eletromidia-3093269891?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=4jQTuBTFFnNrALsT9Y%2BwDA%3D%3D&position=19&pageNum=2&trk=public_jobs_jserp-result_search-card", 276 | "innerText": "Desenvolvedor Node.js" 277 | }, 278 | { 279 | "href": "https://br.linkedin.com/jobs/view/programador-full-stack-at-indra-3058195302?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=9gQwXmdF3AWBK%2BliHpX%2FMw%3D%3D&position=20&pageNum=2&trk=public_jobs_jserp-result_search-card", 280 | "innerText": "Programador Full Stack" 281 | }, 282 | { 283 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-node-js-remoto-at-geekhunter-3096358471?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=EWMwCuxird2XI%2FHR2UV9ww%3D%3D&position=21&pageNum=2&trk=public_jobs_jserp-result_search-card", 284 | "innerText": "Desenvolvedor(a) Back-end Node.js (remoto)" 285 | }, 286 | { 287 | "href": "https://br.linkedin.com/jobs/view/analista-de-observabilidade-at-dasa-3056511389?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=JfpK6wRNX0s8WoV0SC2ZOA%3D%3D&position=22&pageNum=2&trk=public_jobs_jserp-result_search-card", 288 | "innerText": "Analista de Observabilidade" 289 | }, 290 | { 291 | "href": "https://br.linkedin.com/jobs/view/backend-software-engineer-golang-at-rocket-chat-3084966080?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=hhDRtoHmW8hEuogYh5A2mg%3D%3D&position=23&pageNum=2&trk=public_jobs_jserp-result_search-card", 292 | "innerText": "Backend Software Engineer (Golang)" 293 | }, 294 | { 295 | "href": "https://br.linkedin.com/jobs/view/programador-web-at-sweda-3090807955?refId=lbFaViUlcZD5XdFaExHhog%3D%3D&trackingId=J2aLZHZOOgjQ%2BF3fldyQwA%3D%3D&position=24&pageNum=2&trk=public_jobs_jserp-result_search-card", 296 | "innerText": "Programador Web\nSweda\nSão Paulo, SP\nSeja um dos primeiros a se candidatar\nHá 3 dias" 297 | }, 298 | { 299 | "href": "https://br.linkedin.com/jobs/view/front-end-angular-at-savecash-3092728659?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=s1SW%2Bos5o3w7N7UTtbRqIg%3D%3D&position=1&pageNum=3&trk=public_jobs_jserp-result_search-card", 300 | "innerText": "Front-end (Angular)" 301 | }, 302 | { 303 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-f1rst-tecnologia-3090951242?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=fNMMpZxhNCZ95V64flFWTQ%3D%3D&position=2&pageNum=3&trk=public_jobs_jserp-result_search-card", 304 | "innerText": "Desenvolvedor de back end" 305 | }, 306 | { 307 | "href": "https://br.linkedin.com/jobs/view/backend-engineer-m-f-at-integer-consulting-3061663593?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=E3fv7finDUswpSk5o64%2B8Q%3D%3D&position=3&pageNum=3&trk=public_jobs_jserp-result_search-card", 308 | "innerText": "Backend Engineer (m/f)" 309 | }, 310 | { 311 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-front-end-at-ag%C3%AAncia-apis3-3090800575?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=ZjQYoG2nyn8WFR6CH1a4DA%3D%3D&position=4&pageNum=3&trk=public_jobs_jserp-result_search-card", 312 | "innerText": "Desenvolvedor front-end\nAgência Apis3\nSão Paulo, SP\nSeja um dos primeiros a se candidatar\nHá 3 dias" 313 | }, 314 | { 315 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-web-fullstack-iii-python-django-home-office-at-instituto-nacional-de-telecomunica%C3%A7%C3%B5es-inatel-3068487648?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=guwXI2kuh5QW8DcA%2FH%2Bwtw%3D%3D&position=5&pageNum=3&trk=public_jobs_jserp-result_search-card", 316 | "innerText": "Desenvolvedor Web Fullstack III Python/ Django (Home Office)" 317 | }, 318 | { 319 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-fullstack-at-wipro-3083686450?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=tZHYEUHe7hhwWrM3%2FnLDhw%3D%3D&position=6&pageNum=3&trk=public_jobs_jserp-result_search-card", 320 | "innerText": "Desenvolvedor FullStack" 321 | }, 322 | { 323 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-da-web-at-infus-3070383955?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=YaAVrDaJfJVZ%2FRjFQ0QEmg%3D%3D&position=7&pageNum=3&trk=public_jobs_jserp-result_search-card", 324 | "innerText": "Desenvolvedor da web" 325 | }, 326 | { 327 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-node-js-at-eletromidia-3093232614?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=FjqiLFzf4HT3LeGp0ZlAGQ%3D%3D&position=8&pageNum=3&trk=public_jobs_jserp-result_search-card", 328 | "innerText": "Desenvolvedor Node.js" 329 | }, 330 | { 331 | "href": "https://br.linkedin.com/jobs/view/pessoa-desenvolvedora-back-end-python-s%C3%AAnior-at-datum-ti-3093470454?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=IxiDBIO%2BW3bj4t%2FjI04hyg%3D%3D&position=9&pageNum=3&trk=public_jobs_jserp-result_search-card", 332 | "innerText": "Pessoa Desenvolvedora Back-end Python [Sênior]" 333 | }, 334 | { 335 | "href": "https://br.linkedin.com/jobs/view/senior-net-developer-remote-at-rock-content-3070767599?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=2MNNtGguEoScFl3QFPa5Bw%3D%3D&position=10&pageNum=3&trk=public_jobs_jserp-result_search-card", 336 | "innerText": "Senior .Net Developer (Remote)" 337 | }, 338 | { 339 | "href": "https://br.linkedin.com/jobs/view/mobile-fullstack-senior-engineer-at-hopper-3023759920?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=WdSN7ZrhH%2FtB8tqPkeBl2A%3D%3D&position=11&pageNum=3&trk=public_jobs_jserp-result_search-card", 340 | "innerText": "Mobile/FullStack Senior Engineer" 341 | }, 342 | { 343 | "href": "https://br.linkedin.com/jobs/view/software-test-engineer-automation-remote-at-autodesk-3050453318?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=OnBNjM17ou5s2NE62zaJSQ%3D%3D&position=12&pageNum=3&trk=public_jobs_jserp-result_search-card", 344 | "innerText": "Software Test Engineer (Automation) (Remote)" 345 | }, 346 | { 347 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-netbiis-data-technology-experiences-3094933523?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=1AnSES47t10xEC25l8HDDw%3D%3D&position=13&pageNum=3&trk=public_jobs_jserp-result_search-card", 348 | "innerText": "Desenvolvedor de Back end" 349 | }, 350 | { 351 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-back-end-sp-at-guelt-investimentos-3094822944?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=4KuxgQ0A5%2BK1JnZEl9htGw%3D%3D&position=14&pageNum=3&trk=public_jobs_jserp-result_search-card", 352 | "innerText": "DESENVOLVEDOR BACK-END (SP)" 353 | }, 354 | { 355 | "href": "https://br.linkedin.com/jobs/view/tech-support-qa-tester-at-blaze-3089217207?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=HyWgqrPmI6tvDNWC8VHGrA%3D%3D&position=15&pageNum=3&trk=public_jobs_jserp-result_search-card", 356 | "innerText": "Tech Support / QA Tester" 357 | }, 358 | { 359 | "href": "https://br.linkedin.com/jobs/view/sr-software-developer-net-at-lenovo-3072329893?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=1%2FEQFMeFEId4w6dQBq5cOQ%3D%3D&position=16&pageNum=3&trk=public_jobs_jserp-result_search-card", 360 | "innerText": "SR Software Developer .NET" 361 | }, 362 | { 363 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-python-remoto-at-geekhunter-3096362039?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=LUIPPbhvuDv7K99mYIED9g%3D%3D&position=17&pageNum=3&trk=public_jobs_jserp-result_search-card", 364 | "innerText": "Desenvolvedor(a) Back-end Python (remoto)" 365 | }, 366 | { 367 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-node-js-at-geekhunter-3096359387?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=tg84wkoCZVxrOQuXnAzpNQ%3D%3D&position=18&pageNum=3&trk=public_jobs_jserp-result_search-card", 368 | "innerText": "Desenvolvedor(a) Back-end Node.js" 369 | }, 370 | { 371 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-back-end-net-jr-at-innolevels-3090805079?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=xNdCQEyUHy9%2BXx%2FPVBDSrA%3D%3D&position=19&pageNum=3&trk=public_jobs_jserp-result_search-card", 372 | "innerText": "Desenvolvedor Back-end .NET JR" 373 | }, 374 | { 375 | "href": "https://br.linkedin.com/jobs/view/software-engineer-backend-jr-remoto-at-a55-3080395843?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=QgUDuPDoV2TExRLgsj3zGg%3D%3D&position=20&pageNum=3&trk=public_jobs_jserp-result_search-card", 376 | "innerText": "Software Engineer Backend JR (Remoto)" 377 | }, 378 | { 379 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-full-stack-ii-at-whido-3080123372?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=FRLp6kfPVd%2B3OtFBrE6KMg%3D%3D&position=21&pageNum=3&trk=public_jobs_jserp-result_search-card", 380 | "innerText": "Desenvolvedor Full Stack II" 381 | }, 382 | { 383 | "href": "https://br.linkedin.com/jobs/view/backend-c%23-developer-at-ploomes-sistemas-empresariais-3076060477?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=XGihlfzuw%2B53y1kIXJSY1w%3D%3D&position=22&pageNum=3&trk=public_jobs_jserp-result_search-card", 384 | "innerText": "Backend C# Developer\nPloomes Sistemas Empresariais\nSão Paulo, SP\nSeja um dos primeiros a se candidatar\nHá 1 semana" 385 | }, 386 | { 387 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-a-back-end-elixir-remoto-at-geekhunter-3096354948?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=f1kKh%2FMK6OS2FARgwyDFRg%3D%3D&position=23&pageNum=3&trk=public_jobs_jserp-result_search-card", 388 | "innerText": "Desenvolvedor(a) Back-end Elixir (remoto)" 389 | }, 390 | { 391 | "href": "https://br.linkedin.com/jobs/view/desenvolvedor-de-back-end-at-kstack-ksk-3072153874?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=3uHX9ZIWvAXEvfGBC3f37w%3D%3D&position=24&pageNum=3&trk=public_jobs_jserp-result_search-card", 392 | "innerText": "Desenvolvedor de back end" 393 | }, 394 | { 395 | "href": "https://br.linkedin.com/jobs/view/staff-software-engineer-remoto-at-banqi-3093273387?refId=OOrzLI9AQCr%2Bw6IjpMouJw%3D%3D&trackingId=JIakfROdaIH5uQ2Wm2PzUQ%3D%3D&position=25&pageNum=3&trk=public_jobs_jserp-result_search-card", 396 | "innerText": "Staff Software Engineer - Remoto" 397 | } 398 | ] -------------------------------------------------------------------------------- /back/main.js: -------------------------------------------------------------------------------- 1 | const puppeteer = require('puppeteer'); 2 | const fs = require('fs'); 3 | const prompt = require('prompt'); 4 | let counter = 1; 5 | console.log('LinkeBot Iniciado, abra o arquivo Index.HTML 🤖🔎') 6 | 7 | async function pupper(search, additionalPages) { 8 | 9 | await console.log("Atualizando vagas...🔎") 10 | const browser = await puppeteer.launch(); 11 | const page = await browser.newPage(); 12 | await page.goto(`https://www.linkedin.com/jobs/${search}-jobs-brasil?geoId=106057199&countryRedirected=1&position=1&pageNum=0`); 13 | 14 | // Rola até o fim da página, baseado no additionalPages, sempre agaurdando 3 segundos para carregar mais vagas. 15 | for(let i = 0; i < additionalPages ;i++){ 16 | await page.keyboard.down('Control'); 17 | await page.keyboard.press('End'); 18 | await page.keyboard.up('Control'); 19 | await new Promise(resolve => setTimeout(resolve, 3000)); 20 | } 21 | 22 | const list = await page.evaluate(() => { 23 | const nodeList = document.querySelectorAll('a[data-tracking-control-name="public_jobs_jserp-result_search-card"]'); 24 | const textArray = [...nodeList] 25 | const list = textArray.map( ({href, innerText}) => ({ 26 | href, innerText 27 | })); 28 | return list 29 | }); 30 | 31 | 32 | fs.writeFile('./back/data.json', JSON.stringify(list, null, 2), err => { 33 | if (err) throw new Error('Alguma coisa deu errada') 34 | 35 | console.log(`Vagas atualizadas 👌🏻${counter ++} vezes`); 36 | }) 37 | 38 | 39 | await browser.close(); 40 | }; 41 | 42 | async function runBot (){ 43 | await prompt.start(); 44 | const input = await prompt.get(['pages', 'search']); 45 | const search = input.search.replace(' ','-').trim().toLowerCase() 46 | const pagesInput = Number(input.pages) 47 | 48 | setInterval( function() { pupper(search,pagesInput); }, 19000 ); 49 | } 50 | 51 | 52 | 53 | runBot(); 54 | -------------------------------------------------------------------------------- /front/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | LinkeBot 🤖 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 |
23 | 24 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /front/style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400&display=swap'); 2 | 3 | body { 4 | background-color: #0E76A8; 5 | font-family: 'Roboto', sans-serif; 6 | padding: 2rem; 7 | display: flex; 8 | align-items: center; 9 | justify-content: center; 10 | flex-flow: column; 11 | gap: 1rem; 12 | } 13 | 14 | .normal { 15 | background-color: #0E76A8; 16 | } 17 | 18 | button { 19 | display: flex; 20 | align-items: center; 21 | justify-content: center; 22 | width: 70px; 23 | height: 3rem; 24 | border-radius: 20px; 25 | border-style: none; 26 | box-shadow: 5px 3px 10px rgba(0, 0, 0, 0.466); 27 | font-size: 1.5rem; 28 | transition: all ease .6s; 29 | 30 | cursor: pointer; 31 | } 32 | 33 | button:hover { 34 | background-color: #08415c; 35 | transform: scale(1.2) 36 | } 37 | 38 | 39 | .container { 40 | display: flex; 41 | flex-flow: column; 42 | align-items: center; 43 | justify-content: center; 44 | gap: 1rem; 45 | 46 | } 47 | 48 | .container h3 { 49 | font-size: 1rem; 50 | color: white; 51 | font-weight: 400; 52 | } 53 | 54 | .container a { 55 | text-decoration: none; 56 | transition: all ease .6s; 57 | color: white; 58 | } 59 | 60 | li { 61 | list-style: none; 62 | } 63 | 64 | .result { 65 | display: flex; 66 | align-items: center; 67 | justify-content: center; 68 | border: 1px solid white; 69 | width: 60%; 70 | height: 2rem; 71 | padding: 2rem; 72 | border-radius: 20px; 73 | transition: all ease .6s; 74 | text-align: center; 75 | } 76 | 77 | .result:hover { 78 | background-color: #094e6e; 79 | } 80 | 81 | footer p{ 82 | color: #094e6e; 83 | background-color: white; 84 | border-radius: 20px; 85 | padding: 10px; 86 | } 87 | 88 | footer a { 89 | text-decoration: none; 90 | } 91 | 92 | 93 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "linkeBot", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "prompt": "^1.3.0", 9 | "puppeteer": "^13.5.1" 10 | } 11 | }, 12 | "node_modules/@colors/colors": { 13 | "version": "1.5.0", 14 | "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", 15 | "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", 16 | "engines": { 17 | "node": ">=0.1.90" 18 | } 19 | }, 20 | "node_modules/@types/node": { 21 | "version": "17.0.21", 22 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", 23 | "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", 24 | "optional": true 25 | }, 26 | "node_modules/@types/yauzl": { 27 | "version": "2.9.2", 28 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", 29 | "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", 30 | "optional": true, 31 | "dependencies": { 32 | "@types/node": "*" 33 | } 34 | }, 35 | "node_modules/agent-base": { 36 | "version": "6.0.2", 37 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 38 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 39 | "dependencies": { 40 | "debug": "4" 41 | }, 42 | "engines": { 43 | "node": ">= 6.0.0" 44 | } 45 | }, 46 | "node_modules/async": { 47 | "version": "3.2.3", 48 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", 49 | "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" 50 | }, 51 | "node_modules/balanced-match": { 52 | "version": "1.0.2", 53 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 54 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 55 | }, 56 | "node_modules/base64-js": { 57 | "version": "1.5.1", 58 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 59 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 60 | "funding": [ 61 | { 62 | "type": "github", 63 | "url": "https://github.com/sponsors/feross" 64 | }, 65 | { 66 | "type": "patreon", 67 | "url": "https://www.patreon.com/feross" 68 | }, 69 | { 70 | "type": "consulting", 71 | "url": "https://feross.org/support" 72 | } 73 | ] 74 | }, 75 | "node_modules/bl": { 76 | "version": "4.1.0", 77 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 78 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 79 | "dependencies": { 80 | "buffer": "^5.5.0", 81 | "inherits": "^2.0.4", 82 | "readable-stream": "^3.4.0" 83 | } 84 | }, 85 | "node_modules/brace-expansion": { 86 | "version": "1.1.11", 87 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 88 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 89 | "dependencies": { 90 | "balanced-match": "^1.0.0", 91 | "concat-map": "0.0.1" 92 | } 93 | }, 94 | "node_modules/buffer": { 95 | "version": "5.7.1", 96 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 97 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 98 | "funding": [ 99 | { 100 | "type": "github", 101 | "url": "https://github.com/sponsors/feross" 102 | }, 103 | { 104 | "type": "patreon", 105 | "url": "https://www.patreon.com/feross" 106 | }, 107 | { 108 | "type": "consulting", 109 | "url": "https://feross.org/support" 110 | } 111 | ], 112 | "dependencies": { 113 | "base64-js": "^1.3.1", 114 | "ieee754": "^1.1.13" 115 | } 116 | }, 117 | "node_modules/buffer-crc32": { 118 | "version": "0.2.13", 119 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 120 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 121 | "engines": { 122 | "node": "*" 123 | } 124 | }, 125 | "node_modules/chownr": { 126 | "version": "1.1.4", 127 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 128 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 129 | }, 130 | "node_modules/colors": { 131 | "version": "1.0.3", 132 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", 133 | "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", 134 | "engines": { 135 | "node": ">=0.1.90" 136 | } 137 | }, 138 | "node_modules/concat-map": { 139 | "version": "0.0.1", 140 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 141 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 142 | }, 143 | "node_modules/cross-fetch": { 144 | "version": "3.1.5", 145 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", 146 | "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", 147 | "dependencies": { 148 | "node-fetch": "2.6.7" 149 | } 150 | }, 151 | "node_modules/cycle": { 152 | "version": "1.0.3", 153 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", 154 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", 155 | "engines": { 156 | "node": ">=0.4.0" 157 | } 158 | }, 159 | "node_modules/debug": { 160 | "version": "4.3.3", 161 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 162 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 163 | "dependencies": { 164 | "ms": "2.1.2" 165 | }, 166 | "engines": { 167 | "node": ">=6.0" 168 | }, 169 | "peerDependenciesMeta": { 170 | "supports-color": { 171 | "optional": true 172 | } 173 | } 174 | }, 175 | "node_modules/devtools-protocol": { 176 | "version": "0.0.969999", 177 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz", 178 | "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==" 179 | }, 180 | "node_modules/end-of-stream": { 181 | "version": "1.4.4", 182 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 183 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 184 | "dependencies": { 185 | "once": "^1.4.0" 186 | } 187 | }, 188 | "node_modules/extract-zip": { 189 | "version": "2.0.1", 190 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 191 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 192 | "dependencies": { 193 | "debug": "^4.1.1", 194 | "get-stream": "^5.1.0", 195 | "yauzl": "^2.10.0" 196 | }, 197 | "bin": { 198 | "extract-zip": "cli.js" 199 | }, 200 | "engines": { 201 | "node": ">= 10.17.0" 202 | }, 203 | "optionalDependencies": { 204 | "@types/yauzl": "^2.9.1" 205 | } 206 | }, 207 | "node_modules/eyes": { 208 | "version": "0.1.8", 209 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 210 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", 211 | "engines": { 212 | "node": "> 0.1.90" 213 | } 214 | }, 215 | "node_modules/fd-slicer": { 216 | "version": "1.1.0", 217 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 218 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 219 | "dependencies": { 220 | "pend": "~1.2.0" 221 | } 222 | }, 223 | "node_modules/find-up": { 224 | "version": "4.1.0", 225 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 226 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 227 | "dependencies": { 228 | "locate-path": "^5.0.0", 229 | "path-exists": "^4.0.0" 230 | }, 231 | "engines": { 232 | "node": ">=8" 233 | } 234 | }, 235 | "node_modules/fs-constants": { 236 | "version": "1.0.0", 237 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 238 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 239 | }, 240 | "node_modules/fs.realpath": { 241 | "version": "1.0.0", 242 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 243 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 244 | }, 245 | "node_modules/get-stream": { 246 | "version": "5.2.0", 247 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 248 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 249 | "dependencies": { 250 | "pump": "^3.0.0" 251 | }, 252 | "engines": { 253 | "node": ">=8" 254 | }, 255 | "funding": { 256 | "url": "https://github.com/sponsors/sindresorhus" 257 | } 258 | }, 259 | "node_modules/glob": { 260 | "version": "7.2.0", 261 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 262 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 263 | "dependencies": { 264 | "fs.realpath": "^1.0.0", 265 | "inflight": "^1.0.4", 266 | "inherits": "2", 267 | "minimatch": "^3.0.4", 268 | "once": "^1.3.0", 269 | "path-is-absolute": "^1.0.0" 270 | }, 271 | "engines": { 272 | "node": "*" 273 | }, 274 | "funding": { 275 | "url": "https://github.com/sponsors/isaacs" 276 | } 277 | }, 278 | "node_modules/https-proxy-agent": { 279 | "version": "5.0.0", 280 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 281 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 282 | "dependencies": { 283 | "agent-base": "6", 284 | "debug": "4" 285 | }, 286 | "engines": { 287 | "node": ">= 6" 288 | } 289 | }, 290 | "node_modules/ieee754": { 291 | "version": "1.2.1", 292 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 293 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 294 | "funding": [ 295 | { 296 | "type": "github", 297 | "url": "https://github.com/sponsors/feross" 298 | }, 299 | { 300 | "type": "patreon", 301 | "url": "https://www.patreon.com/feross" 302 | }, 303 | { 304 | "type": "consulting", 305 | "url": "https://feross.org/support" 306 | } 307 | ] 308 | }, 309 | "node_modules/inflight": { 310 | "version": "1.0.6", 311 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 312 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 313 | "dependencies": { 314 | "once": "^1.3.0", 315 | "wrappy": "1" 316 | } 317 | }, 318 | "node_modules/inherits": { 319 | "version": "2.0.4", 320 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 321 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 322 | }, 323 | "node_modules/isstream": { 324 | "version": "0.1.2", 325 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 326 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 327 | }, 328 | "node_modules/locate-path": { 329 | "version": "5.0.0", 330 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 331 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 332 | "dependencies": { 333 | "p-locate": "^4.1.0" 334 | }, 335 | "engines": { 336 | "node": ">=8" 337 | } 338 | }, 339 | "node_modules/minimatch": { 340 | "version": "3.1.2", 341 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 342 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 343 | "dependencies": { 344 | "brace-expansion": "^1.1.7" 345 | }, 346 | "engines": { 347 | "node": "*" 348 | } 349 | }, 350 | "node_modules/mkdirp-classic": { 351 | "version": "0.5.3", 352 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 353 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 354 | }, 355 | "node_modules/ms": { 356 | "version": "2.1.2", 357 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 358 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 359 | }, 360 | "node_modules/mute-stream": { 361 | "version": "0.0.8", 362 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 363 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 364 | }, 365 | "node_modules/node-fetch": { 366 | "version": "2.6.7", 367 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 368 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 369 | "dependencies": { 370 | "whatwg-url": "^5.0.0" 371 | }, 372 | "engines": { 373 | "node": "4.x || >=6.0.0" 374 | }, 375 | "peerDependencies": { 376 | "encoding": "^0.1.0" 377 | }, 378 | "peerDependenciesMeta": { 379 | "encoding": { 380 | "optional": true 381 | } 382 | } 383 | }, 384 | "node_modules/once": { 385 | "version": "1.4.0", 386 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 387 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 388 | "dependencies": { 389 | "wrappy": "1" 390 | } 391 | }, 392 | "node_modules/p-limit": { 393 | "version": "2.3.0", 394 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 395 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 396 | "dependencies": { 397 | "p-try": "^2.0.0" 398 | }, 399 | "engines": { 400 | "node": ">=6" 401 | }, 402 | "funding": { 403 | "url": "https://github.com/sponsors/sindresorhus" 404 | } 405 | }, 406 | "node_modules/p-locate": { 407 | "version": "4.1.0", 408 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 409 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 410 | "dependencies": { 411 | "p-limit": "^2.2.0" 412 | }, 413 | "engines": { 414 | "node": ">=8" 415 | } 416 | }, 417 | "node_modules/p-try": { 418 | "version": "2.2.0", 419 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 420 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 421 | "engines": { 422 | "node": ">=6" 423 | } 424 | }, 425 | "node_modules/path-exists": { 426 | "version": "4.0.0", 427 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 428 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 429 | "engines": { 430 | "node": ">=8" 431 | } 432 | }, 433 | "node_modules/path-is-absolute": { 434 | "version": "1.0.1", 435 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 436 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 437 | "engines": { 438 | "node": ">=0.10.0" 439 | } 440 | }, 441 | "node_modules/pend": { 442 | "version": "1.2.0", 443 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 444 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 445 | }, 446 | "node_modules/pkg-dir": { 447 | "version": "4.2.0", 448 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 449 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 450 | "dependencies": { 451 | "find-up": "^4.0.0" 452 | }, 453 | "engines": { 454 | "node": ">=8" 455 | } 456 | }, 457 | "node_modules/progress": { 458 | "version": "2.0.3", 459 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 460 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 461 | "engines": { 462 | "node": ">=0.4.0" 463 | } 464 | }, 465 | "node_modules/prompt": { 466 | "version": "1.3.0", 467 | "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", 468 | "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", 469 | "dependencies": { 470 | "@colors/colors": "1.5.0", 471 | "async": "3.2.3", 472 | "read": "1.0.x", 473 | "revalidator": "0.1.x", 474 | "winston": "2.x" 475 | }, 476 | "engines": { 477 | "node": ">= 6.0.0" 478 | } 479 | }, 480 | "node_modules/proxy-from-env": { 481 | "version": "1.1.0", 482 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 483 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 484 | }, 485 | "node_modules/pump": { 486 | "version": "3.0.0", 487 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 488 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 489 | "dependencies": { 490 | "end-of-stream": "^1.1.0", 491 | "once": "^1.3.1" 492 | } 493 | }, 494 | "node_modules/puppeteer": { 495 | "version": "13.5.1", 496 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.5.1.tgz", 497 | "integrity": "sha512-wWxO//vMiqxlvuzHMAJ0pRJeDHvDtM7DQpW1GKdStz2nZo2G42kOXBDgkmQ+zqjwMCFofKGesBeeKxIkX9BO+w==", 498 | "hasInstallScript": true, 499 | "dependencies": { 500 | "cross-fetch": "3.1.5", 501 | "debug": "4.3.3", 502 | "devtools-protocol": "0.0.969999", 503 | "extract-zip": "2.0.1", 504 | "https-proxy-agent": "5.0.0", 505 | "pkg-dir": "4.2.0", 506 | "progress": "2.0.3", 507 | "proxy-from-env": "1.1.0", 508 | "rimraf": "3.0.2", 509 | "tar-fs": "2.1.1", 510 | "unbzip2-stream": "1.4.3", 511 | "ws": "8.5.0" 512 | }, 513 | "engines": { 514 | "node": ">=10.18.1" 515 | } 516 | }, 517 | "node_modules/read": { 518 | "version": "1.0.7", 519 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", 520 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", 521 | "dependencies": { 522 | "mute-stream": "~0.0.4" 523 | }, 524 | "engines": { 525 | "node": ">=0.8" 526 | } 527 | }, 528 | "node_modules/readable-stream": { 529 | "version": "3.6.0", 530 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 531 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 532 | "dependencies": { 533 | "inherits": "^2.0.3", 534 | "string_decoder": "^1.1.1", 535 | "util-deprecate": "^1.0.1" 536 | }, 537 | "engines": { 538 | "node": ">= 6" 539 | } 540 | }, 541 | "node_modules/revalidator": { 542 | "version": "0.1.8", 543 | "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", 544 | "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", 545 | "engines": { 546 | "node": ">= 0.4.0" 547 | } 548 | }, 549 | "node_modules/rimraf": { 550 | "version": "3.0.2", 551 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 552 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 553 | "dependencies": { 554 | "glob": "^7.1.3" 555 | }, 556 | "bin": { 557 | "rimraf": "bin.js" 558 | }, 559 | "funding": { 560 | "url": "https://github.com/sponsors/isaacs" 561 | } 562 | }, 563 | "node_modules/safe-buffer": { 564 | "version": "5.2.1", 565 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 566 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 567 | "funding": [ 568 | { 569 | "type": "github", 570 | "url": "https://github.com/sponsors/feross" 571 | }, 572 | { 573 | "type": "patreon", 574 | "url": "https://www.patreon.com/feross" 575 | }, 576 | { 577 | "type": "consulting", 578 | "url": "https://feross.org/support" 579 | } 580 | ] 581 | }, 582 | "node_modules/stack-trace": { 583 | "version": "0.0.10", 584 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 585 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", 586 | "engines": { 587 | "node": "*" 588 | } 589 | }, 590 | "node_modules/string_decoder": { 591 | "version": "1.3.0", 592 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 593 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 594 | "dependencies": { 595 | "safe-buffer": "~5.2.0" 596 | } 597 | }, 598 | "node_modules/tar-fs": { 599 | "version": "2.1.1", 600 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 601 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 602 | "dependencies": { 603 | "chownr": "^1.1.1", 604 | "mkdirp-classic": "^0.5.2", 605 | "pump": "^3.0.0", 606 | "tar-stream": "^2.1.4" 607 | } 608 | }, 609 | "node_modules/tar-stream": { 610 | "version": "2.2.0", 611 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 612 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 613 | "dependencies": { 614 | "bl": "^4.0.3", 615 | "end-of-stream": "^1.4.1", 616 | "fs-constants": "^1.0.0", 617 | "inherits": "^2.0.3", 618 | "readable-stream": "^3.1.1" 619 | }, 620 | "engines": { 621 | "node": ">=6" 622 | } 623 | }, 624 | "node_modules/through": { 625 | "version": "2.3.8", 626 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 627 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 628 | }, 629 | "node_modules/tr46": { 630 | "version": "0.0.3", 631 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 632 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 633 | }, 634 | "node_modules/unbzip2-stream": { 635 | "version": "1.4.3", 636 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 637 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 638 | "dependencies": { 639 | "buffer": "^5.2.1", 640 | "through": "^2.3.8" 641 | } 642 | }, 643 | "node_modules/util-deprecate": { 644 | "version": "1.0.2", 645 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 646 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 647 | }, 648 | "node_modules/webidl-conversions": { 649 | "version": "3.0.1", 650 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 651 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 652 | }, 653 | "node_modules/whatwg-url": { 654 | "version": "5.0.0", 655 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 656 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 657 | "dependencies": { 658 | "tr46": "~0.0.3", 659 | "webidl-conversions": "^3.0.0" 660 | } 661 | }, 662 | "node_modules/winston": { 663 | "version": "2.4.6", 664 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", 665 | "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", 666 | "dependencies": { 667 | "async": "^3.2.3", 668 | "colors": "1.0.x", 669 | "cycle": "1.0.x", 670 | "eyes": "0.1.x", 671 | "isstream": "0.1.x", 672 | "stack-trace": "0.0.x" 673 | }, 674 | "engines": { 675 | "node": ">= 0.10.0" 676 | } 677 | }, 678 | "node_modules/wrappy": { 679 | "version": "1.0.2", 680 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 681 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 682 | }, 683 | "node_modules/ws": { 684 | "version": "8.5.0", 685 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", 686 | "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", 687 | "engines": { 688 | "node": ">=10.0.0" 689 | }, 690 | "peerDependencies": { 691 | "bufferutil": "^4.0.1", 692 | "utf-8-validate": "^5.0.2" 693 | }, 694 | "peerDependenciesMeta": { 695 | "bufferutil": { 696 | "optional": true 697 | }, 698 | "utf-8-validate": { 699 | "optional": true 700 | } 701 | } 702 | }, 703 | "node_modules/yauzl": { 704 | "version": "2.10.0", 705 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 706 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 707 | "dependencies": { 708 | "buffer-crc32": "~0.2.3", 709 | "fd-slicer": "~1.1.0" 710 | } 711 | } 712 | }, 713 | "dependencies": { 714 | "@colors/colors": { 715 | "version": "1.5.0", 716 | "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", 717 | "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" 718 | }, 719 | "@types/node": { 720 | "version": "17.0.21", 721 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", 722 | "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", 723 | "optional": true 724 | }, 725 | "@types/yauzl": { 726 | "version": "2.9.2", 727 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", 728 | "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", 729 | "optional": true, 730 | "requires": { 731 | "@types/node": "*" 732 | } 733 | }, 734 | "agent-base": { 735 | "version": "6.0.2", 736 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 737 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 738 | "requires": { 739 | "debug": "4" 740 | } 741 | }, 742 | "async": { 743 | "version": "3.2.3", 744 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", 745 | "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" 746 | }, 747 | "balanced-match": { 748 | "version": "1.0.2", 749 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 750 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 751 | }, 752 | "base64-js": { 753 | "version": "1.5.1", 754 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 755 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 756 | }, 757 | "bl": { 758 | "version": "4.1.0", 759 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 760 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 761 | "requires": { 762 | "buffer": "^5.5.0", 763 | "inherits": "^2.0.4", 764 | "readable-stream": "^3.4.0" 765 | } 766 | }, 767 | "brace-expansion": { 768 | "version": "1.1.11", 769 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 770 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 771 | "requires": { 772 | "balanced-match": "^1.0.0", 773 | "concat-map": "0.0.1" 774 | } 775 | }, 776 | "buffer": { 777 | "version": "5.7.1", 778 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 779 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 780 | "requires": { 781 | "base64-js": "^1.3.1", 782 | "ieee754": "^1.1.13" 783 | } 784 | }, 785 | "buffer-crc32": { 786 | "version": "0.2.13", 787 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 788 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 789 | }, 790 | "chownr": { 791 | "version": "1.1.4", 792 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 793 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 794 | }, 795 | "colors": { 796 | "version": "1.0.3", 797 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", 798 | "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" 799 | }, 800 | "concat-map": { 801 | "version": "0.0.1", 802 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 803 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 804 | }, 805 | "cross-fetch": { 806 | "version": "3.1.5", 807 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", 808 | "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", 809 | "requires": { 810 | "node-fetch": "2.6.7" 811 | } 812 | }, 813 | "cycle": { 814 | "version": "1.0.3", 815 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", 816 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" 817 | }, 818 | "debug": { 819 | "version": "4.3.3", 820 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 821 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 822 | "requires": { 823 | "ms": "2.1.2" 824 | } 825 | }, 826 | "devtools-protocol": { 827 | "version": "0.0.969999", 828 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz", 829 | "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==" 830 | }, 831 | "end-of-stream": { 832 | "version": "1.4.4", 833 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 834 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 835 | "requires": { 836 | "once": "^1.4.0" 837 | } 838 | }, 839 | "extract-zip": { 840 | "version": "2.0.1", 841 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 842 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 843 | "requires": { 844 | "@types/yauzl": "^2.9.1", 845 | "debug": "^4.1.1", 846 | "get-stream": "^5.1.0", 847 | "yauzl": "^2.10.0" 848 | } 849 | }, 850 | "eyes": { 851 | "version": "0.1.8", 852 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 853 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" 854 | }, 855 | "fd-slicer": { 856 | "version": "1.1.0", 857 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 858 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 859 | "requires": { 860 | "pend": "~1.2.0" 861 | } 862 | }, 863 | "find-up": { 864 | "version": "4.1.0", 865 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 866 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 867 | "requires": { 868 | "locate-path": "^5.0.0", 869 | "path-exists": "^4.0.0" 870 | } 871 | }, 872 | "fs-constants": { 873 | "version": "1.0.0", 874 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 875 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 876 | }, 877 | "fs.realpath": { 878 | "version": "1.0.0", 879 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 880 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 881 | }, 882 | "get-stream": { 883 | "version": "5.2.0", 884 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 885 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 886 | "requires": { 887 | "pump": "^3.0.0" 888 | } 889 | }, 890 | "glob": { 891 | "version": "7.2.0", 892 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 893 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 894 | "requires": { 895 | "fs.realpath": "^1.0.0", 896 | "inflight": "^1.0.4", 897 | "inherits": "2", 898 | "minimatch": "^3.0.4", 899 | "once": "^1.3.0", 900 | "path-is-absolute": "^1.0.0" 901 | } 902 | }, 903 | "https-proxy-agent": { 904 | "version": "5.0.0", 905 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 906 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 907 | "requires": { 908 | "agent-base": "6", 909 | "debug": "4" 910 | } 911 | }, 912 | "ieee754": { 913 | "version": "1.2.1", 914 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 915 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 916 | }, 917 | "inflight": { 918 | "version": "1.0.6", 919 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 920 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 921 | "requires": { 922 | "once": "^1.3.0", 923 | "wrappy": "1" 924 | } 925 | }, 926 | "inherits": { 927 | "version": "2.0.4", 928 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 929 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 930 | }, 931 | "isstream": { 932 | "version": "0.1.2", 933 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 934 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 935 | }, 936 | "locate-path": { 937 | "version": "5.0.0", 938 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 939 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 940 | "requires": { 941 | "p-locate": "^4.1.0" 942 | } 943 | }, 944 | "minimatch": { 945 | "version": "3.1.2", 946 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 947 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 948 | "requires": { 949 | "brace-expansion": "^1.1.7" 950 | } 951 | }, 952 | "mkdirp-classic": { 953 | "version": "0.5.3", 954 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 955 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 956 | }, 957 | "ms": { 958 | "version": "2.1.2", 959 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 960 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 961 | }, 962 | "mute-stream": { 963 | "version": "0.0.8", 964 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 965 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 966 | }, 967 | "node-fetch": { 968 | "version": "2.6.7", 969 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 970 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 971 | "requires": { 972 | "whatwg-url": "^5.0.0" 973 | } 974 | }, 975 | "once": { 976 | "version": "1.4.0", 977 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 978 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 979 | "requires": { 980 | "wrappy": "1" 981 | } 982 | }, 983 | "p-limit": { 984 | "version": "2.3.0", 985 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 986 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 987 | "requires": { 988 | "p-try": "^2.0.0" 989 | } 990 | }, 991 | "p-locate": { 992 | "version": "4.1.0", 993 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 994 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 995 | "requires": { 996 | "p-limit": "^2.2.0" 997 | } 998 | }, 999 | "p-try": { 1000 | "version": "2.2.0", 1001 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1002 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1003 | }, 1004 | "path-exists": { 1005 | "version": "4.0.0", 1006 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1007 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1008 | }, 1009 | "path-is-absolute": { 1010 | "version": "1.0.1", 1011 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1012 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1013 | }, 1014 | "pend": { 1015 | "version": "1.2.0", 1016 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1017 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 1018 | }, 1019 | "pkg-dir": { 1020 | "version": "4.2.0", 1021 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1022 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1023 | "requires": { 1024 | "find-up": "^4.0.0" 1025 | } 1026 | }, 1027 | "progress": { 1028 | "version": "2.0.3", 1029 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1030 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" 1031 | }, 1032 | "prompt": { 1033 | "version": "1.3.0", 1034 | "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", 1035 | "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", 1036 | "requires": { 1037 | "@colors/colors": "1.5.0", 1038 | "async": "3.2.3", 1039 | "read": "1.0.x", 1040 | "revalidator": "0.1.x", 1041 | "winston": "2.x" 1042 | } 1043 | }, 1044 | "proxy-from-env": { 1045 | "version": "1.1.0", 1046 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1047 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1048 | }, 1049 | "pump": { 1050 | "version": "3.0.0", 1051 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1052 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1053 | "requires": { 1054 | "end-of-stream": "^1.1.0", 1055 | "once": "^1.3.1" 1056 | } 1057 | }, 1058 | "puppeteer": { 1059 | "version": "13.5.1", 1060 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.5.1.tgz", 1061 | "integrity": "sha512-wWxO//vMiqxlvuzHMAJ0pRJeDHvDtM7DQpW1GKdStz2nZo2G42kOXBDgkmQ+zqjwMCFofKGesBeeKxIkX9BO+w==", 1062 | "requires": { 1063 | "cross-fetch": "3.1.5", 1064 | "debug": "4.3.3", 1065 | "devtools-protocol": "0.0.969999", 1066 | "extract-zip": "2.0.1", 1067 | "https-proxy-agent": "5.0.0", 1068 | "pkg-dir": "4.2.0", 1069 | "progress": "2.0.3", 1070 | "proxy-from-env": "1.1.0", 1071 | "rimraf": "3.0.2", 1072 | "tar-fs": "2.1.1", 1073 | "unbzip2-stream": "1.4.3", 1074 | "ws": "8.5.0" 1075 | } 1076 | }, 1077 | "read": { 1078 | "version": "1.0.7", 1079 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", 1080 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", 1081 | "requires": { 1082 | "mute-stream": "~0.0.4" 1083 | } 1084 | }, 1085 | "readable-stream": { 1086 | "version": "3.6.0", 1087 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1088 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1089 | "requires": { 1090 | "inherits": "^2.0.3", 1091 | "string_decoder": "^1.1.1", 1092 | "util-deprecate": "^1.0.1" 1093 | } 1094 | }, 1095 | "revalidator": { 1096 | "version": "0.1.8", 1097 | "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", 1098 | "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" 1099 | }, 1100 | "rimraf": { 1101 | "version": "3.0.2", 1102 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1103 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1104 | "requires": { 1105 | "glob": "^7.1.3" 1106 | } 1107 | }, 1108 | "safe-buffer": { 1109 | "version": "5.2.1", 1110 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1111 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1112 | }, 1113 | "stack-trace": { 1114 | "version": "0.0.10", 1115 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 1116 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" 1117 | }, 1118 | "string_decoder": { 1119 | "version": "1.3.0", 1120 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1121 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1122 | "requires": { 1123 | "safe-buffer": "~5.2.0" 1124 | } 1125 | }, 1126 | "tar-fs": { 1127 | "version": "2.1.1", 1128 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 1129 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 1130 | "requires": { 1131 | "chownr": "^1.1.1", 1132 | "mkdirp-classic": "^0.5.2", 1133 | "pump": "^3.0.0", 1134 | "tar-stream": "^2.1.4" 1135 | } 1136 | }, 1137 | "tar-stream": { 1138 | "version": "2.2.0", 1139 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1140 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1141 | "requires": { 1142 | "bl": "^4.0.3", 1143 | "end-of-stream": "^1.4.1", 1144 | "fs-constants": "^1.0.0", 1145 | "inherits": "^2.0.3", 1146 | "readable-stream": "^3.1.1" 1147 | } 1148 | }, 1149 | "through": { 1150 | "version": "2.3.8", 1151 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1152 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1153 | }, 1154 | "tr46": { 1155 | "version": "0.0.3", 1156 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1157 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 1158 | }, 1159 | "unbzip2-stream": { 1160 | "version": "1.4.3", 1161 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 1162 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 1163 | "requires": { 1164 | "buffer": "^5.2.1", 1165 | "through": "^2.3.8" 1166 | } 1167 | }, 1168 | "util-deprecate": { 1169 | "version": "1.0.2", 1170 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1171 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1172 | }, 1173 | "webidl-conversions": { 1174 | "version": "3.0.1", 1175 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1176 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 1177 | }, 1178 | "whatwg-url": { 1179 | "version": "5.0.0", 1180 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1181 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 1182 | "requires": { 1183 | "tr46": "~0.0.3", 1184 | "webidl-conversions": "^3.0.0" 1185 | } 1186 | }, 1187 | "winston": { 1188 | "version": "2.4.6", 1189 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", 1190 | "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", 1191 | "requires": { 1192 | "async": "^3.2.3", 1193 | "colors": "1.0.x", 1194 | "cycle": "1.0.x", 1195 | "eyes": "0.1.x", 1196 | "isstream": "0.1.x", 1197 | "stack-trace": "0.0.x" 1198 | } 1199 | }, 1200 | "wrappy": { 1201 | "version": "1.0.2", 1202 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1203 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1204 | }, 1205 | "ws": { 1206 | "version": "8.5.0", 1207 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", 1208 | "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", 1209 | "requires": {} 1210 | }, 1211 | "yauzl": { 1212 | "version": "2.10.0", 1213 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1214 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1215 | "requires": { 1216 | "buffer-crc32": "~0.2.3", 1217 | "fd-slicer": "~1.1.0" 1218 | } 1219 | } 1220 | } 1221 | } 1222 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "prompt": "^1.3.0", 4 | "puppeteer": "^13.5.1" 5 | } 6 | } 7 | --------------------------------------------------------------------------------