-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add interactive captcha handler with Slack and Discord #2385
Conversation
It would be difficult. Definitely not via discord input. Maybe via some paid anti-captcha service. |
5178e66
to
d911c21
Compare
bug in the Discord implementation, should be quick fix, will address later tonight (Edit: fixed) |
d911c21
to
fa6f73a
Compare
fa6f73a
to
1a182eb
Compare
Added some documentation as I see it's in the repo. Hope they're set up right. 🤞 |
This is great! I will be testing in the coming days. Thanks so much for putting this together -- this will be a great addition! |
f7680b2
to
c21a959
Compare
What an awesome addition. I'm sure a lot of folks will be loving this. Testing it was fun :) Thanks for the contribution! |
Adding an auto solver would be nice too. But this one is already a great start! |
|
||
const response = await getCaptchaInputAsync( | ||
imgElementSrc || | ||
`captcha detected on [${page.url()}] but unable to get captcha image url` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It may be a good idea to figure out how to do this without sending another captcha download request, it may fail/get detected on some websites.
I think it was possible via Canvas like this
const cnv = document.createElement('CANVAS');
const ctx = cnv.getContext('2d');
ctx.drawImage(img, 0, 0);
const base64ImgData = cnv.toDataURL();
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like here are some solutions for puppeter: https://intoli.com/blog/saving-images/
Good thought. Screen cap is part of what I had in mind for solving harder
captchas workflow, so it could be employed here too.
…On Fri, Apr 23, 2021, 1:12 PM Alex Pantechovskis ***@***.***> wrote:
***@***.**** commented on this pull request.
------------------------------
In src/store/lookup.ts
<#2385 (comment)>:
> + selector: store.labels.captchaHandler?.input || 'input',
+ };
+ const submitElementQuery = {
+ requireVisible: true,
+ selector: store.labels.captchaHandler?.submit || 'button[type="submit"]',
+ };
+
+ // get image src for captcha
+ const imgElementSrc = await page.evaluate((selector: string) => {
+ const element = document.querySelector<HTMLImageElement>(selector);
+ return element?.src;
+ }, imageElementQuery.selector);
+
+ const response = await getCaptchaInputAsync(
+ imgElementSrc ||
+ `captcha detected on [${page.url()}] but unable to get captcha image url`
Looks like here are some solutions for puppeter:
https://intoli.com/blog/saving-images/
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#2385 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACD4CILUAW7BJOURQBY35VTTKHIETANCNFSM43EPGTRQ>
.
|
Yeah, I guess one way that doesn't break CORS etc. is to get captcha coordinates, take page screenshot and crop it. |
Puppeteer lets you screen cap specific elements. We could just grab the
image container directly, or a larger container in the case of a different
implementation.
…On Fri, Apr 23, 2021, 3:12 PM Alex Pantechovskis ***@***.***> wrote:
Yeah, I guess one way that doesn't break CORS etc. is to get captcha
coordinates, take page screenshot and crop it.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#2385 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACD4CIIXQAT7RYXSH6U4XJ3TKHWE7ANCNFSM43EPGTRQ>
.
|
Neat, just recently I was thinking about doing smth a bit similar but have captcha img open to browser and do input in console. Sounds like this'll be a better way of doing things. |
🤖 I have created a release *beep* *boop* --- ## [3.6.0](v3.5.0...v3.6.0) (2022-10-21) ### Features * add 3080ti ([#2598](#2598)) ([4cfbd37](4cfbd37)) * add 3080ti ([#2600](#2600)) ([51c9b3a](51c9b3a)) * add a few stores for spain ([#2646](#2646)) ([0b060e8](0b060e8)) * add alternate-fr, 3070ti, change alternate to alternate.de ([#2653](#2653)) ([8c7b8aa](8c7b8aa)) * add INCOGNITO to dotenv-example and volta support ([#2484](#2484)) ([b579052](b579052)) * add interactive captcha handler with Slack and Discord ([#2385](#2385)) ([409769e](409769e)) * add ldlc-italy and fixes ollo/hardware-planet ([#2903](#2903)) ([d4f4076](d4f4076)), closes [#2867](#2867) * add SCREENSHOT_DIR config option ([#2801](#2801)) ([fe99aa4](fe99aa4)) * add ubiquiti store and dream machine model. ([#3034](#3034)) ([87301fe](87301fe)) * add waitUntil and waitForSelctor to linksBuilder ([#2437](#2437)) ([cac7c20](cac7c20)) * **captcha:** add support for configurable capture type ([#2468](#2468)) ([6e614a2](6e614a2)) * change max price behavior ([9b02c36](9b02c36)) * color empty stores ([#2312](#2312)) ([bbfa808](bbfa808)) * **coolmod:** add linksBuilder and update selectors ([#2803](#2803)) ([f297e1d](f297e1d)) * **equippr:** add links builder ([#2795](#2795)) ([e631d80](e631d80)) * **gotify:** add priority option ([#2546](#2546)) ([32fe440](32fe440)) * **notification:** add gotify ([8f2de5d](8f2de5d)), closes [#2541](#2541) [#2536](https://github.com/jef/streetmerchant/issues/2536) * **notification:** add support for Free mobile ([#2285](#2285)) ([6be2e0d](6be2e0d)) * **notifications:** add apple push notifications ([#2077](#2077)) ([6b78b2e](6b78b2e)) * **pushover:** ability to specify device ([#2101](#2101)) ([d03aea0](d03aea0)) * **pushover:** add support for sound ([#2203](#2203)) ([83ce922](83ce922)) * **redis:** introduce pub/sub ([#2855](#2855)) ([d6d8ef2](d6d8ef2)) * **series:** support for rx6700xt ([#2290](#2290)) ([113c9ce](113c9ce)) * **store:** add 3050 in topachat and materiel ([#2945](#2945)) ([fc0c3da](fc0c3da)) * **store:** add amd-at ([#2462](#2462)) ([441617f](441617f)) * **store:** add amd-be store ([#2338](#2338)) ([6e9b1a9](6e9b1a9)) * **store:** add amd-nl store ([#2072](#2072)) ([49c9e8c](49c9e8c)) * **store:** Add AO and BT (UK) ([#2089](#2089)) ([1714e89](1714e89)) * **store:** add cyberport-at ([#2463](#2463)) ([5a744b1](5a744b1)) * **store:** add materiel.net (french), 35 3060ti references ([#2287](#2287)) ([0ebe745](0ebe745)) * **store:** add mediamarkt austria ([#1836](#1836)) ([ae8e72a](ae8e72a)) * **store:** add Microsoft (CA) for Xbox X/S ([#2764](#2764)) ([ca784c8](ca784c8)) * **store:** add Microsoft for Xbox S/X ([#2738](#2738)) ([d06d050](d06d050)) * **store:** add MightyApe, NoelLeeming and TheWarehouse (NZ) ([#2133](#2133)) ([e2d8040](e2d8040)) * **store:** add multicom.no and more products to NO stores ([#2483](#2483)) ([41305f1](41305f1)) * **stores-nz:** update labels ([#2486](#2486)) ([c0f46d7](c0f46d7)) * use new nightly release build ([51118ba](51118ba)) * **web:** add select all/none for columns & black theme ([#2878](#2878)) ([2ff7f58](2ff7f58)) ### Bug Fixes * add missing tests in Dockerfile ([#2323](#2323)) ([cd6e1f6](cd6e1f6)) * **alternate:** use button selector instead of text ([#2419](#2419)) ([35f9eb4](35f9eb4)) * amazon prices ([#2914](#2914)) ([f7236b3](f7236b3)), closes [#2926](#2926) * **amazon-es:** use euroFormat ([#2371](#2371)) ([4eb702b](4eb702b)) * **amazon-eu:** checking price selector ([#2856](#2856)) ([19afe41](19afe41)) * **amazon:** false positives for xbox ([#2497](#2497)) ([790fe9b](790fe9b)) * **apns:** use when specified ([99a274d](99a274d)) * **bestbuy-ca:** avoid false positive ([#2694](#2694)) ([0c589a7](0c589a7)) * **captcha:** use Slack captcha handler token when provided ([#2460](#2460)) ([164902a](164902a)), closes [#2428](#2428) * clear cookies when rotating proxies ([#2575](#2575)) ([8854ce9](8854ce9)) * **discord:** add Discord.ClientOptions ([#2714](#2714)) ([3787c54](3787c54)) * **discord:** properly wait for webhooks ([#2352](#2352)) ([bc59da1](bc59da1)) * **docker:** disable opening browser ([d13f7f1](d13f7f1)) * **lookup:** prevent terminal from being hidden ([#2461](#2461)) ([39fac90](39fac90)) * **microcenter:** add outOfStock label ([#2432](#2432)) ([092919a](092919a)), closes [#2407](#2407) * **nodemon:** use npx with ts-node ([#2423](#2423)) ([b6ac6c5](b6ac6c5)) * parsing prices with thousands separator and European format ([#2153](#2153)) ([61f8e3a](61f8e3a)) * partial url regexp ([#2382](#2382)) ([61af2a4](61af2a4)) * **playstation:** fix inStock selector ([#2187](#2187)) ([b0efc83](b0efc83)) * **puppeteer:** cannot read property ([#2987](#2987)) ([04fbdc1](04fbdc1)) * remove spaces from price ([#2482](#2482)) ([eb76f0d](eb76f0d)) * **terraform:** update IAM configuration for ECS deployment ([#2675](#2675)) ([9c346e7](9c346e7)) * **web:** add favicon to prevent missing icon console error ([#2375](#2375)) ([2be33ac](2be33ac)) * **xbox:** false positive ([#2726](#2726)) ([e5e8481](e5e8481)) ### Refactoring * **captcha:** use seconds instead of ms ([#2424](#2424)) ([d652b49](d652b49)) * **freemobile:** remove local throw ([bf8f242](bf8f242)) * **materiel:** update docs, change name ([7ec8a16](7ec8a16)) * simplify maxPrice logic ([a25b7f1](a25b7f1)) * **store:** replace euroFormat with regex ([#2131](#2131)) ([795c723](795c723)) ### Documentation * add better heroku documentation ([#2942](#2942)) ([f344615](f344615)) * fix sort-able tables ([08789a7](08789a7)) * make templates required ([00b468a](00b468a)) * remove twitter ([d19d05c](d19d05c)) * remove twitter ([1aa0224](1aa0224)) * toggle light/dark mode ([1e76d5a](1e76d5a)) * update badges ([c2c8531](c2c8531)) * update edit_uri location ([af603c2](af603c2)) * update incorrect store description for alternate-de ([#2765](#2765)) ([28ce7e9](28ce7e9)) * update issue templates ([74d71e4](74d71e4)) * update issue templates ([9aa3f16](9aa3f16)) * update issue templates ([7171113](7171113)) * update node references ([f65aab8](f65aab8)) * update Xbox Series S and X price limit desc ([#2098](#2098)) ([ba35706](ba35706)) * use node lts ([2a482e3](2a482e3)), closes [#2776](#2776) ### Miscellaneous * add APNS to dotenv-example ([#2174](#2174)) ([4bd048f](4bd048f)) * add links to RX 6700 XT in German stores ([#2736](#2736)) ([430ec73](430ec73)) * **alternate-de:** add gpus ([#2797](#2797)) ([a6d7447](a6d7447)) * **alternate:** add new oos label ([#2409](#2409)) ([5937d01](5937d01)) * **alternate:** add PS5 bundle ([#2562](#2562)) ([1122075](1122075)) * **alternate:** update links and selectors ([#2282](#2282)) ([ea095a3](ea095a3)) * **amazon-fr:** update evga 3080 ftw3 link ([#2286](#2286)) ([5b2fe88](5b2fe88)) * **amazon-uk:** add 3060 cards ([#2229](#2229)) ([983cc52](983cc52)) * **amd:** add rx6800xt midnight black ([#2321](#2321)) ([c7e24e7](c7e24e7)) * **amd:** update rx6900xt urls ([#2094](#2094)) ([7fcce58](7fcce58)) * **amd:** update rx6900xt urls ([#2876](#2876)) ([88ec46e](88ec46e)) * **asus:** update urls ([#2155](#2155)) ([245d110](245d110)) * **bestbuy:** add 3080ti models ([#2670](#2670)) ([cc0aaec](cc0aaec)) * bump dependencies ([10f7e0c](10f7e0c)) * bump dependencies ([#2413](#2413)) ([3c00eca](3c00eca)) * bump node 16.5.0 ([4e3eade](4e3eade)) * bump node version ([9ba964a](9ba964a)) * bump node, implement proper ci cache ([9b0b4d1](9b0b4d1)) * bump stale workflow to 60 days ([3c1419f](3c1419f)) * change url ([2af1531](2af1531)) * change verbiage to be more generic ([e006c48](e006c48)) * **computeruniverse:** add backoff code ([#2542](#2542)) ([42a24a6](42a24a6)) * **coolblue:** add ps5 consoles ([#2597](#2597)) ([4bb58ac](4bb58ac)) * **currys:** add rx6800, rx6800xt and rx6900xt ([#2236](#2236)) ([211e3e2](211e3e2)) * **deps-dev:** bump @types/cheerio from 0.22.28 to 0.22.29 ([#2580](#2580)) ([e4ebdc4](e4ebdc4)) * **deps-dev:** bump @types/node from 14.14.35 to 14.14.36 ([#2233](#2233)) ([a7a5e69](a7a5e69)) * **deps-dev:** bump @types/node from 15.3.0 to 15.6.1 ([#2571](#2571)) ([3e74a4c](3e74a4c)) * **deps-dev:** bump @types/nodemailer from 6.4.1 to 6.4.2 ([#2582](#2582)) ([1cb1787](1cb1787)) * **deps-dev:** bump @types/sinon from 9.0.10 to 9.0.11 ([#2166](#2166)) ([4cdda98](4cdda98)) * **deps-dev:** bump mocha from 8.3.0 to 8.3.2 ([#2167](#2167)) ([a575143](a575143)) * **deps-dev:** bump typescript from 4.2.2 to 4.2.3 ([#2092](#2092)) ([b516e26](b516e26)) * **deps-dev:** bump webpack from 5.24.2 to 5.26.3 ([#2164](#2164)) ([2775124](2775124)) * **deps-dev:** bump webpack from 5.35.0 to 5.36.2 ([#2480](#2480)) ([e397306](e397306)) * **deps-dev:** bump webpack from 5.37.0 to 5.37.1 ([#2558](#2558)) ([9e13cd7](9e13cd7)) * **deps-dev:** bump webpack from 5.37.0 to 5.38.0 ([#2579](#2579)) ([9fc5ec0](9fc5ec0)) * **deps:** bump actions/checkout from 2 to 3 ([#2967](#2967)) ([92a3c94](92a3c94)) * **deps:** bump actions/setup-node from 2 to 3 ([#2963](#2963)) ([31c2887](31c2887)) * **deps:** bump actions/setup-python from 2 to 3 ([#2965](#2965)) ([fe53ba3](fe53ba3)) * **deps:** bump actions/stale from 3 to 4 ([#2671](#2671)) ([e030310](e030310)) * **deps:** bump dependencies ([1ab0af2](1ab0af2)) * **deps:** bump dependencies ([aed9cfe](aed9cfe)) * **deps:** bump dependencies ([2a1734a](2a1734a)) * **deps:** bump dependencies, node 15.14.0 ([91a0ff5](91a0ff5)) * **deps:** bump google-github-actions/release-please-action from 2 to 3.1.3 ([#2968](#2968)) ([0906f64](0906f64)) * **deps:** bump node 16.1.0 ([1e62878](1e62878)) * **deps:** bump node from 15.11.0-alpine3.13 to 15.12.0-alpine3.13 ([#2185](#2185)) ([2ebbf55](2ebbf55)) * **deps:** bump node-notifier from 9.0.1 to 10.0.0 ([#2583](#2583)) ([a751cb1](a751cb1)) * **deps:** bump nodemailer from 6.6.0 to 6.6.1 ([#2568](#2568)) ([2e5b07c](2e5b07c)) * **deps:** bump open from 7.4.2 to 8.0.2 ([#2078](#2078)) ([00e4ddc](00e4ddc)) * **deps:** bump open from 8.0.2 to 8.0.3 ([#2186](#2186)) ([54883f0](54883f0)) * **deps:** bump open from 8.0.2 to 8.2.0 ([#2572](#2572)) ([36e188f](36e188f)) * **deps:** bump top-user-agents from 1.0.25 to 1.0.26 ([#2556](#2556)) ([729afd0](729afd0)) * **deps:** bump twilio from 3.62.0 to 3.63.0 ([#2561](#2561)) ([7d35c2b](7d35c2b)) * **deps:** bump twilio from 3.66.1 to 3.71.1 ([#2837](#2837)) ([72140be](72140be)) * **deps:** bump twitch-chat-client from 4.4.13 to 4.5.1 ([#2127](#2127)) ([eeab4b1](eeab4b1)) * **deps:** bump url-parse from 1.5.3 to 1.5.10 ([#2964](#2964)) ([6f57777](6f57777)) * **elkjop:** update selectors ([#2505](#2505)) ([c9049a3](c9049a3)) * **gamestop:** update inventory ([#2239](#2239)) ([c1c92bd](c1c92bd)) * improve linksBuilder logging ([#2785](#2785)) ([73eaa88](73eaa88)) * **ldlc:** add 3050 ([#2948](#2948)) ([a146ea3](a146ea3)) * **materiel:** add 3070 and 3080 cards ([#2393](#2393)) ([8c39d0d](8c39d0d)) * **mediamarkt, saturn:** add new outOfStock message ([#2850](#2850)) ([5d4f4c5](5d4f4c5)) * **mediamarkt:** update captcha selector ([#2496](#2496)) ([64120e7](64120e7)) * **microcenter:** add 3090 cards ([d46c636](d46c636)) * move lookup loop logging to lower level ([#2784](#2784)) ([a20faaa](a20faaa)) * **multicom:** update selectors ([#2499](#2499)) ([7c4c6ed](7c4c6ed)) * **netonnet-no:** update selectors ([#2547](#2547)) ([0378a7c](0378a7c)) * **nodejs:** bump version ([#2088](#2088)) ([afe7a70](afe7a70)) * **notification:** add better logging, remove debug ([d12639e](d12639e)) * **nvidia:** add 3070ti & 3080ti ([#2798](#2798)) ([ada90bf](ada90bf)) * **otto:** add labels for xbox series x & s ([#2515](#2515)) ([d0a6c7e](d0a6c7e)) * prune invalid links ([#2592](#2592)) ([b33f678](b33f678)) * remove hooks ([b6af582](b6af582)) * remove unused dependencies ([53e7a8d](53e7a8d)) * revert puppeteer, run linter ([5e9b3db](5e9b3db)) * **store:** add additional PS5 bundles and alternative links for MediaMarkt (DE) & Saturn (DE) ([#2820](#2820)) ([668ed54](668ed54)) * **store:** add additional PS5 bundles to MediaMarkt (DE) & Saturn (DE) ([#2787](#2787)) ([0d936a9](0d936a9)) * **store:** add more links to norwegian stores ([#2485](#2485)) ([a286b73](a286b73)) * **store:** add Nvidia RTX Cards ([#2204](#2204)) ([0a9ce0d](0a9ce0d)) * **store:** add some PS5 bundles ([#2021](#2021)) ([d4dc397](d4dc397)) * **store:** EBGames renamed to Gamestop (in Canada) ([#2734](#2734)) ([4e77c67](4e77c67)) * **store:** updated and added Nvidia links ([#2806](#2806)) ([c31a861](c31a861)) * update dependencies ([f14a1ca](f14a1ca)) * update dependencies ([1d08d4c](1d08d4c)) * update dependencies and nightly workflow ([3b43732](3b43732)) * update package-lock, remove ci perms ([#3059](#3059)) ([9b8b8ff](9b8b8ff)) * update pr template ([f0e5c5d](f0e5c5d)) * update stale workflow ([e4a267f](e4a267f)) * **walmart:** update 5900x url ([#2184](#2184)) ([b2ce715](b2ce715)) * **xbox:** update oos selector ([4d89306](4d89306)), closes [#2118](#2118) [#2479](#2479) [#2475](https://github.com/jef/streetmerchant/issues/2475) [#2200](#2200) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [3.6.0](v3.5.0...v3.6.0) (2022-10-21) ### Features * add 3080ti ([#2598](#2598)) ([4cfbd37](4cfbd37)) * add 3080ti ([#2600](#2600)) ([51c9b3a](51c9b3a)) * add a few stores for spain ([#2646](#2646)) ([0b060e8](0b060e8)) * add alternate-fr, 3070ti, change alternate to alternate.de ([#2653](#2653)) ([8c7b8aa](8c7b8aa)) * add INCOGNITO to dotenv-example and volta support ([#2484](#2484)) ([b579052](b579052)) * add interactive captcha handler with Slack and Discord ([#2385](#2385)) ([409769e](409769e)) * add ldlc-italy and fixes ollo/hardware-planet ([#2903](#2903)) ([d4f4076](d4f4076)), closes [#2867](#2867) * add SCREENSHOT_DIR config option ([#2801](#2801)) ([fe99aa4](fe99aa4)) * add ubiquiti store and dream machine model. ([#3034](#3034)) ([87301fe](87301fe)) * add waitUntil and waitForSelctor to linksBuilder ([#2437](#2437)) ([cac7c20](cac7c20)) * **captcha:** add support for configurable capture type ([#2468](#2468)) ([6e614a2](6e614a2)) * change max price behavior ([9b02c36](9b02c36)) * color empty stores ([#2312](#2312)) ([bbfa808](bbfa808)) * **coolmod:** add linksBuilder and update selectors ([#2803](#2803)) ([f297e1d](f297e1d)) * **equippr:** add links builder ([#2795](#2795)) ([e631d80](e631d80)) * **gotify:** add priority option ([#2546](#2546)) ([32fe440](32fe440)) * **notification:** add gotify ([8f2de5d](8f2de5d)), closes [#2541](#2541) [#2536](https://github.com/jef/streetmerchant/issues/2536) * **notification:** add support for Free mobile ([#2285](#2285)) ([6be2e0d](6be2e0d)) * **notifications:** add apple push notifications ([#2077](#2077)) ([6b78b2e](6b78b2e)) * **pushover:** ability to specify device ([#2101](#2101)) ([d03aea0](d03aea0)) * **pushover:** add support for sound ([#2203](#2203)) ([83ce922](83ce922)) * **redis:** introduce pub/sub ([#2855](#2855)) ([d6d8ef2](d6d8ef2)) * **series:** support for rx6700xt ([#2290](#2290)) ([113c9ce](113c9ce)) * **store:** add 3050 in topachat and materiel ([#2945](#2945)) ([fc0c3da](fc0c3da)) * **store:** add amd-at ([#2462](#2462)) ([441617f](441617f)) * **store:** add amd-be store ([#2338](#2338)) ([6e9b1a9](6e9b1a9)) * **store:** add amd-nl store ([#2072](#2072)) ([49c9e8c](49c9e8c)) * **store:** Add AO and BT (UK) ([#2089](#2089)) ([1714e89](1714e89)) * **store:** add cyberport-at ([#2463](#2463)) ([5a744b1](5a744b1)) * **store:** add materiel.net (french), 35 3060ti references ([#2287](#2287)) ([0ebe745](0ebe745)) * **store:** add mediamarkt austria ([#1836](#1836)) ([ae8e72a](ae8e72a)) * **store:** add Microsoft (CA) for Xbox X/S ([#2764](#2764)) ([ca784c8](ca784c8)) * **store:** add Microsoft for Xbox S/X ([#2738](#2738)) ([d06d050](d06d050)) * **store:** add MightyApe, NoelLeeming and TheWarehouse (NZ) ([#2133](#2133)) ([e2d8040](e2d8040)) * **store:** add multicom.no and more products to NO stores ([#2483](#2483)) ([41305f1](41305f1)) * **stores-nz:** update labels ([#2486](#2486)) ([c0f46d7](c0f46d7)) * use new nightly release build ([51118ba](51118ba)) * **web:** add select all/none for columns & black theme ([#2878](#2878)) ([2ff7f58](2ff7f58)) ### Bug Fixes * add missing tests in Dockerfile ([#2323](#2323)) ([cd6e1f6](cd6e1f6)) * **alternate:** use button selector instead of text ([#2419](#2419)) ([35f9eb4](35f9eb4)) * amazon prices ([#2914](#2914)) ([f7236b3](f7236b3)), closes [#2926](#2926) * **amazon-es:** use euroFormat ([#2371](#2371)) ([4eb702b](4eb702b)) * **amazon-eu:** checking price selector ([#2856](#2856)) ([19afe41](19afe41)) * **amazon:** false positives for xbox ([#2497](#2497)) ([790fe9b](790fe9b)) * **apns:** use when specified ([99a274d](99a274d)) * **bestbuy-ca:** avoid false positive ([#2694](#2694)) ([0c589a7](0c589a7)) * **captcha:** use Slack captcha handler token when provided ([#2460](#2460)) ([164902a](164902a)), closes [#2428](#2428) * clear cookies when rotating proxies ([#2575](#2575)) ([8854ce9](8854ce9)) * **discord:** add Discord.ClientOptions ([#2714](#2714)) ([3787c54](3787c54)) * **discord:** properly wait for webhooks ([#2352](#2352)) ([bc59da1](bc59da1)) * **docker:** disable opening browser ([d13f7f1](d13f7f1)) * **lookup:** prevent terminal from being hidden ([#2461](#2461)) ([39fac90](39fac90)) * **microcenter:** add outOfStock label ([#2432](#2432)) ([092919a](092919a)), closes [#2407](#2407) * **nodemon:** use npx with ts-node ([#2423](#2423)) ([b6ac6c5](b6ac6c5)) * parsing prices with thousands separator and European format ([#2153](#2153)) ([61f8e3a](61f8e3a)) * partial url regexp ([#2382](#2382)) ([61af2a4](61af2a4)) * **playstation:** fix inStock selector ([#2187](#2187)) ([b0efc83](b0efc83)) * **puppeteer:** cannot read property ([#2987](#2987)) ([04fbdc1](04fbdc1)) * remove spaces from price ([#2482](#2482)) ([eb76f0d](eb76f0d)) * **terraform:** update IAM configuration for ECS deployment ([#2675](#2675)) ([9c346e7](9c346e7)) * **web:** add favicon to prevent missing icon console error ([#2375](#2375)) ([2be33ac](2be33ac)) * **xbox:** false positive ([#2726](#2726)) ([e5e8481](e5e8481)) ### Refactoring * **captcha:** use seconds instead of ms ([#2424](#2424)) ([d652b49](d652b49)) * **freemobile:** remove local throw ([bf8f242](bf8f242)) * **materiel:** update docs, change name ([7ec8a16](7ec8a16)) * simplify maxPrice logic ([a25b7f1](a25b7f1)) * **store:** replace euroFormat with regex ([#2131](#2131)) ([795c723](795c723)) ### Documentation * add better heroku documentation ([#2942](#2942)) ([f344615](f344615)) * fix sort-able tables ([08789a7](08789a7)) * make templates required ([00b468a](00b468a)) * remove twitter ([d19d05c](d19d05c)) * remove twitter ([1aa0224](1aa0224)) * toggle light/dark mode ([1e76d5a](1e76d5a)) * update badges ([c2c8531](c2c8531)) * update edit_uri location ([af603c2](af603c2)) * update incorrect store description for alternate-de ([#2765](#2765)) ([28ce7e9](28ce7e9)) * update issue templates ([74d71e4](74d71e4)) * update issue templates ([9aa3f16](9aa3f16)) * update issue templates ([7171113](7171113)) * update node references ([f65aab8](f65aab8)) * update Xbox Series S and X price limit desc ([#2098](#2098)) ([ba35706](ba35706)) * use node lts ([2a482e3](2a482e3)), closes [#2776](#2776) ### Miscellaneous * add APNS to dotenv-example ([#2174](#2174)) ([4bd048f](4bd048f)) * add links to RX 6700 XT in German stores ([#2736](#2736)) ([430ec73](430ec73)) * **alternate-de:** add gpus ([#2797](#2797)) ([a6d7447](a6d7447)) * **alternate:** add new oos label ([#2409](#2409)) ([5937d01](5937d01)) * **alternate:** add PS5 bundle ([#2562](#2562)) ([1122075](1122075)) * **alternate:** update links and selectors ([#2282](#2282)) ([ea095a3](ea095a3)) * **amazon-fr:** update evga 3080 ftw3 link ([#2286](#2286)) ([5b2fe88](5b2fe88)) * **amazon-uk:** add 3060 cards ([#2229](#2229)) ([983cc52](983cc52)) * **amd:** add rx6800xt midnight black ([#2321](#2321)) ([c7e24e7](c7e24e7)) * **amd:** update rx6900xt urls ([#2094](#2094)) ([7fcce58](7fcce58)) * **amd:** update rx6900xt urls ([#2876](#2876)) ([88ec46e](88ec46e)) * **asus:** update urls ([#2155](#2155)) ([245d110](245d110)) * **bestbuy:** add 3080ti models ([#2670](#2670)) ([cc0aaec](cc0aaec)) * bump dependencies ([10f7e0c](10f7e0c)) * bump dependencies ([#2413](#2413)) ([3c00eca](3c00eca)) * bump node 16.5.0 ([4e3eade](4e3eade)) * bump node version ([9ba964a](9ba964a)) * bump node, implement proper ci cache ([9b0b4d1](9b0b4d1)) * bump stale workflow to 60 days ([3c1419f](3c1419f)) * change url ([2af1531](2af1531)) * change verbiage to be more generic ([e006c48](e006c48)) * **computeruniverse:** add backoff code ([#2542](#2542)) ([42a24a6](42a24a6)) * **coolblue:** add ps5 consoles ([#2597](#2597)) ([4bb58ac](4bb58ac)) * **currys:** add rx6800, rx6800xt and rx6900xt ([#2236](#2236)) ([211e3e2](211e3e2)) * **deps-dev:** bump @types/cheerio from 0.22.28 to 0.22.29 ([#2580](#2580)) ([e4ebdc4](e4ebdc4)) * **deps-dev:** bump @types/node from 14.14.35 to 14.14.36 ([#2233](#2233)) ([a7a5e69](a7a5e69)) * **deps-dev:** bump @types/node from 15.3.0 to 15.6.1 ([#2571](#2571)) ([3e74a4c](3e74a4c)) * **deps-dev:** bump @types/nodemailer from 6.4.1 to 6.4.2 ([#2582](#2582)) ([1cb1787](1cb1787)) * **deps-dev:** bump @types/sinon from 9.0.10 to 9.0.11 ([#2166](#2166)) ([4cdda98](4cdda98)) * **deps-dev:** bump mocha from 8.3.0 to 8.3.2 ([#2167](#2167)) ([a575143](a575143)) * **deps-dev:** bump typescript from 4.2.2 to 4.2.3 ([#2092](#2092)) ([b516e26](b516e26)) * **deps-dev:** bump webpack from 5.24.2 to 5.26.3 ([#2164](#2164)) ([2775124](2775124)) * **deps-dev:** bump webpack from 5.35.0 to 5.36.2 ([#2480](#2480)) ([e397306](e397306)) * **deps-dev:** bump webpack from 5.37.0 to 5.37.1 ([#2558](#2558)) ([9e13cd7](9e13cd7)) * **deps-dev:** bump webpack from 5.37.0 to 5.38.0 ([#2579](#2579)) ([9fc5ec0](9fc5ec0)) * **deps:** bump actions/checkout from 2 to 3 ([#2967](#2967)) ([92a3c94](92a3c94)) * **deps:** bump actions/setup-node from 2 to 3 ([#2963](#2963)) ([31c2887](31c2887)) * **deps:** bump actions/setup-python from 2 to 3 ([#2965](#2965)) ([fe53ba3](fe53ba3)) * **deps:** bump actions/stale from 3 to 4 ([#2671](#2671)) ([e030310](e030310)) * **deps:** bump dependencies ([1ab0af2](1ab0af2)) * **deps:** bump dependencies ([aed9cfe](aed9cfe)) * **deps:** bump dependencies ([2a1734a](2a1734a)) * **deps:** bump dependencies, node 15.14.0 ([91a0ff5](91a0ff5)) * **deps:** bump google-github-actions/release-please-action from 2 to 3.1.3 ([#2968](#2968)) ([0906f64](0906f64)) * **deps:** bump node 16.1.0 ([1e62878](1e62878)) * **deps:** bump node from 15.11.0-alpine3.13 to 15.12.0-alpine3.13 ([#2185](#2185)) ([2ebbf55](2ebbf55)) * **deps:** bump node-notifier from 9.0.1 to 10.0.0 ([#2583](#2583)) ([a751cb1](a751cb1)) * **deps:** bump nodemailer from 6.6.0 to 6.6.1 ([#2568](#2568)) ([2e5b07c](2e5b07c)) * **deps:** bump open from 7.4.2 to 8.0.2 ([#2078](#2078)) ([00e4ddc](00e4ddc)) * **deps:** bump open from 8.0.2 to 8.0.3 ([#2186](#2186)) ([54883f0](54883f0)) * **deps:** bump open from 8.0.2 to 8.2.0 ([#2572](#2572)) ([36e188f](36e188f)) * **deps:** bump top-user-agents from 1.0.25 to 1.0.26 ([#2556](#2556)) ([729afd0](729afd0)) * **deps:** bump twilio from 3.62.0 to 3.63.0 ([#2561](#2561)) ([7d35c2b](7d35c2b)) * **deps:** bump twilio from 3.66.1 to 3.71.1 ([#2837](#2837)) ([72140be](72140be)) * **deps:** bump twitch-chat-client from 4.4.13 to 4.5.1 ([#2127](#2127)) ([eeab4b1](eeab4b1)) * **deps:** bump url-parse from 1.5.3 to 1.5.10 ([#2964](#2964)) ([6f57777](6f57777)) * **elkjop:** update selectors ([#2505](#2505)) ([c9049a3](c9049a3)) * **gamestop:** update inventory ([#2239](#2239)) ([c1c92bd](c1c92bd)) * improve linksBuilder logging ([#2785](#2785)) ([73eaa88](73eaa88)) * **ldlc:** add 3050 ([#2948](#2948)) ([a146ea3](a146ea3)) * **materiel:** add 3070 and 3080 cards ([#2393](#2393)) ([8c39d0d](8c39d0d)) * **mediamarkt, saturn:** add new outOfStock message ([#2850](#2850)) ([5d4f4c5](5d4f4c5)) * **mediamarkt:** update captcha selector ([#2496](#2496)) ([64120e7](64120e7)) * **microcenter:** add 3090 cards ([d46c636](d46c636)) * move lookup loop logging to lower level ([#2784](#2784)) ([a20faaa](a20faaa)) * **multicom:** update selectors ([#2499](#2499)) ([7c4c6ed](7c4c6ed)) * **netonnet-no:** update selectors ([#2547](#2547)) ([0378a7c](0378a7c)) * **nodejs:** bump version ([#2088](#2088)) ([afe7a70](afe7a70)) * **notification:** add better logging, remove debug ([d12639e](d12639e)) * **nvidia:** add 3070ti & 3080ti ([#2798](#2798)) ([ada90bf](ada90bf)) * **otto:** add labels for xbox series x & s ([#2515](#2515)) ([d0a6c7e](d0a6c7e)) * prune invalid links ([#2592](#2592)) ([b33f678](b33f678)) * remove hooks ([b6af582](b6af582)) * remove unused dependencies ([53e7a8d](53e7a8d)) * revert puppeteer, run linter ([5e9b3db](5e9b3db)) * **store:** add additional PS5 bundles and alternative links for MediaMarkt (DE) & Saturn (DE) ([#2820](#2820)) ([668ed54](668ed54)) * **store:** add additional PS5 bundles to MediaMarkt (DE) & Saturn (DE) ([#2787](#2787)) ([0d936a9](0d936a9)) * **store:** add more links to norwegian stores ([#2485](#2485)) ([a286b73](a286b73)) * **store:** add Nvidia RTX Cards ([#2204](#2204)) ([0a9ce0d](0a9ce0d)) * **store:** add some PS5 bundles ([#2021](#2021)) ([d4dc397](d4dc397)) * **store:** EBGames renamed to Gamestop (in Canada) ([#2734](#2734)) ([4e77c67](4e77c67)) * **store:** updated and added Nvidia links ([#2806](#2806)) ([c31a861](c31a861)) * update dependencies ([f14a1ca](f14a1ca)) * update dependencies ([1d08d4c](1d08d4c)) * update dependencies and nightly workflow ([3b43732](3b43732)) * update package-lock, remove ci perms ([#3059](#3059)) ([ba98f26](ba98f26)) * update pr template ([f0e5c5d](f0e5c5d)) * update stale workflow ([e4a267f](e4a267f)) * **walmart:** update 5900x url ([#2184](#2184)) ([b2ce715](b2ce715)) * **xbox:** update oos selector ([4d89306](4d89306)), closes [#2118](#2118) [#2479](#2479) [#2475](https://github.com/jef/streetmerchant/issues/2475) [#2200](#2200) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Description
Added a simple captcha handler to allow better captcha experience. Currently in headless mode there is no way to deal with captcha which makes running in Docker useless. Even when running with browser open, it's still difficult to deal with captcha as other tabs can open, taking focus away from captcha page.
Basic functionality description
Uses existing captcha detection logic. When captcha is detected, grabs captcha image URL, sends to configured service, and waits up to configured timeout for response, polling at configured intervals.
How to use
The
dotenv
file now has 5 new captcha-related variables.Once these have been configured, the bot will message the user specified using the defined service.
Testing
Added a new functional test to the functional test folder. Simply fill out the
dotenv
variables (shown above) and runnpm run test:captcha
(ornpm run test:captcha:production
) to run the test and ensure the DM/response is received.Sample images
Discord
Slack