From 2fea17c4151748cda08ad8d4aea470a555ebed69 Mon Sep 17 00:00:00 2001 From: TheNetsky <56271887+TheNetsky@users.noreply.github.com> Date: Sat, 20 Jan 2024 12:11:02 +0100 Subject: [PATCH] 1.4.3 - Fixed browser generating mobile browser after the first account - Hopefully fixed script erroring after not finding parent promotions - Added support for MacOS (Thanks @alecm858) - Made some changes to search result scrolling --- package.json | 8 ++++---- src/functions/Workers.ts | 2 +- src/functions/activities/Search.ts | 25 ++++++++++++++++--------- src/index.ts | 2 ++ 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 3e58f46..e663611 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "microsoft-rewards-script", - "version": "1.4.2", + "version": "1.4.3", "description": "Automatically do tasks for Microsoft Rewards but in TS!", "main": "index.js", "engines": { @@ -12,7 +12,7 @@ "ts-start": "ts-node ./src/index.ts", "dev": "ts-node ./src/index.ts -dev", "kill-chrome-win": "powershell -Command \"Get-Process | Where-Object { $_.MainModule.FileVersionInfo.FileDescription -eq 'Google Chrome for Testing' } | ForEach-Object { Stop-Process -Id $_.Id -Force }\"", - "create-docker" : "docker build -t microsoft-rewards-script-docker ." + "create-docker": "docker build -t microsoft-rewards-script-docker ." }, "keywords": [ "Bing Rewards", @@ -32,11 +32,11 @@ "typescript": "^5.3.3" }, "dependencies": { - "axios": "^1.6.2", + "axios": "^1.6.5", "cheerio": "^1.0.0-rc.12", "fingerprint-generator": "^2.1.46", "fingerprint-injector": "^2.1.46", - "playwright": "^1.40.1", + "playwright": "^1.41.1", "ts-node": "^10.9.2" } } diff --git a/src/functions/Workers.ts b/src/functions/Workers.ts index 7f672d8..b347b44 100644 --- a/src/functions/Workers.ts +++ b/src/functions/Workers.ts @@ -38,7 +38,7 @@ export class Workers { // Punch Card async doPunchCard(page: Page, data: DashboardData) { - const punchCardsUncompleted = data.punchCards?.filter(x => !x.parentPromotion.complete) ?? [] // Only return uncompleted punch cards + const punchCardsUncompleted = data.punchCards?.filter(x => !x.parentPromotion?.complete) ?? [] // Only return uncompleted punch cards if (!punchCardsUncompleted.length) { this.bot.log('PUNCH-CARD', 'All "Punch Cards" have already been completed') diff --git a/src/functions/activities/Search.ts b/src/functions/activities/Search.ts index 2f1f628..86e0af3 100644 --- a/src/functions/activities/Search.ts +++ b/src/functions/activities/Search.ts @@ -1,5 +1,6 @@ import { Page } from 'playwright' import axios from 'axios' +import { platform } from 'os' import { Workers } from '../Workers' @@ -128,20 +129,25 @@ export class Search extends Workers { } private async bingSearch(searchPage: Page, query: string) { + const platformControlKey = platform() === 'darwin' ? 'Meta' : 'Control' + // Try a max of 5 times for (let i = 0; i < 5; i++) { try { - // Go back to the top - await searchPage.keyboard.press('Home') + + // Go to top of the page + await searchPage.evaluate(() => { + window.scrollTo(0, 0) + }) const searchBar = '#sb_form_q' - await searchPage.waitForSelector(searchBar, { state: 'attached', timeout: 10_000 }) + await searchPage.waitForSelector(searchBar, { state: 'visible', timeout: 10_000 }) await searchPage.click(searchBar) // Focus on the textarea await this.bot.utils.wait(500) - await searchPage.keyboard.down('Control') + await searchPage.keyboard.down(platformControlKey) await searchPage.keyboard.press('A') await searchPage.keyboard.press('Backspace') - await searchPage.keyboard.up('Control') + await searchPage.keyboard.up(platformControlKey) await searchPage.keyboard.type(query) await searchPage.keyboard.press('Enter') @@ -252,10 +258,11 @@ export class Search extends Workers { private async randomScroll(page: Page) { try { - // Press the arrow down key to scroll - for (let i = 0; i < this.bot.utils.randomNumber(5, 600); i++) { - await page.keyboard.press('ArrowDown') - } + const scrollAmount = this.bot.utils.randomNumber(5, 5000) + + await page.evaluate((scrollAmount) => { + window.scrollBy(0, scrollAmount) + }, scrollAmount) } catch (error) { this.bot.log('SEARCH-RANDOM-SCROLL', 'An error occurred:' + error, 'error') diff --git a/src/index.ts b/src/index.ts index 2133d75..79be2af 100644 --- a/src/index.ts +++ b/src/index.ts @@ -125,6 +125,8 @@ export class MicrosoftRewardsBot { // Desktop async Desktop(account: Account) { + this.isMobile = false + const browser = await this.browserFactory.createBrowser(account.proxy, account.email) this.homePage = await browser.newPage()