- 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
This commit is contained in:
TheNetsky
2024-01-20 12:11:02 +01:00
parent c5beccb54b
commit 2fea17c415
4 changed files with 23 additions and 14 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "microsoft-rewards-script", "name": "microsoft-rewards-script",
"version": "1.4.2", "version": "1.4.3",
"description": "Automatically do tasks for Microsoft Rewards but in TS!", "description": "Automatically do tasks for Microsoft Rewards but in TS!",
"main": "index.js", "main": "index.js",
"engines": { "engines": {
@@ -32,11 +32,11 @@
"typescript": "^5.3.3" "typescript": "^5.3.3"
}, },
"dependencies": { "dependencies": {
"axios": "^1.6.2", "axios": "^1.6.5",
"cheerio": "^1.0.0-rc.12", "cheerio": "^1.0.0-rc.12",
"fingerprint-generator": "^2.1.46", "fingerprint-generator": "^2.1.46",
"fingerprint-injector": "^2.1.46", "fingerprint-injector": "^2.1.46",
"playwright": "^1.40.1", "playwright": "^1.41.1",
"ts-node": "^10.9.2" "ts-node": "^10.9.2"
} }
} }

View File

@@ -38,7 +38,7 @@ export class Workers {
// Punch Card // Punch Card
async doPunchCard(page: Page, data: DashboardData) { 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) { if (!punchCardsUncompleted.length) {
this.bot.log('PUNCH-CARD', 'All "Punch Cards" have already been completed') this.bot.log('PUNCH-CARD', 'All "Punch Cards" have already been completed')

View File

@@ -1,5 +1,6 @@
import { Page } from 'playwright' import { Page } from 'playwright'
import axios from 'axios' import axios from 'axios'
import { platform } from 'os'
import { Workers } from '../Workers' import { Workers } from '../Workers'
@@ -128,20 +129,25 @@ export class Search extends Workers {
} }
private async bingSearch(searchPage: Page, query: string) { private async bingSearch(searchPage: Page, query: string) {
const platformControlKey = platform() === 'darwin' ? 'Meta' : 'Control'
// Try a max of 5 times // Try a max of 5 times
for (let i = 0; i < 5; i++) { for (let i = 0; i < 5; i++) {
try { 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' 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 searchPage.click(searchBar) // Focus on the textarea
await this.bot.utils.wait(500) 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('A')
await searchPage.keyboard.press('Backspace') await searchPage.keyboard.press('Backspace')
await searchPage.keyboard.up('Control') await searchPage.keyboard.up(platformControlKey)
await searchPage.keyboard.type(query) await searchPage.keyboard.type(query)
await searchPage.keyboard.press('Enter') await searchPage.keyboard.press('Enter')
@@ -252,10 +258,11 @@ export class Search extends Workers {
private async randomScroll(page: Page) { private async randomScroll(page: Page) {
try { try {
// Press the arrow down key to scroll const scrollAmount = this.bot.utils.randomNumber(5, 5000)
for (let i = 0; i < this.bot.utils.randomNumber(5, 600); i++) {
await page.keyboard.press('ArrowDown') await page.evaluate((scrollAmount) => {
} window.scrollBy(0, scrollAmount)
}, scrollAmount)
} catch (error) { } catch (error) {
this.bot.log('SEARCH-RANDOM-SCROLL', 'An error occurred:' + error, 'error') this.bot.log('SEARCH-RANDOM-SCROLL', 'An error occurred:' + error, 'error')

View File

@@ -125,6 +125,8 @@ export class MicrosoftRewardsBot {
// Desktop // Desktop
async Desktop(account: Account) { async Desktop(account: Account) {
this.isMobile = false
const browser = await this.browserFactory.createBrowser(account.proxy, account.email) const browser = await this.browserFactory.createBrowser(account.proxy, account.email)
this.homePage = await browser.newPage() this.homePage = await browser.newPage()