Complete automáticamente las tareas de actividad de Jingdong 618: use el código de script autojs para colgar fácilmente

const VERSIÓN = '2022618-16'

if (!auto.service) { toast('¡El servicio de accesibilidad no se ha iniciado! ¡Salir!') exit() }


let showVersion = function () { console.log('versión actual:' + VERSIÓN) console.log('¡Hola, mundo!') brindis('versión actual:' + VERSIÓN) }



consola.mostrar()
mostrarVersión()

función getSetting() { let indices = [] autoOpen && indices.push(0) autoMute && indices.push(1) autoJoin && indices.push(2)



let settings = dialogs.multiChoice('Task Settings', ['Abra automáticamente JD.com para ingresar al evento. Desmarque esta opción si abre varias veces o la lista de tareas no se puede abrir automáticamente', 'Ajuste automáticamente el volumen de medios a 0. Para evitar que la tarea en vivo emita un sonido, selecciónela por primera vez Es necesario modificar el permiso de configuración del sistema', 'Completar automáticamente la tarea de membresía. JD autorizará el número de teléfono móvil al comerciante y puede recibir SMS promocionales en el futuro'], índices)

if (configuraciones.longitud == 0) { brindis('Cancelar selección, tarea detenida') exit() }


if (configuración.indexOf(0) != -1) { storage.put('autoOpen', true) autoOpen = true } else { storage.put('autoOpen', false) autoOpen = false } if (settings.indexOf( 1) != -1) { storage.put('autoMute', true) autoMute = true } else { storage.put('autoMute', false) autoMute = false } if (settings.indexOf(2) != -1 ) { storage.put('autoJoin', true) autoJoin = true } else { storage.put('autoJoin', false) autoJoin = false } }




















let almacenamiento = almacenamientos.create("jd_task");
let autoOpen = storage.get('autoOpen', true)
let autoMute = storage.get('autoMute', true)
let autoJoin = storage.get('autoJoin', true)
getSetting()

if (autoMute) { try { device.setMusicVolume(0) toast('Estableció con éxito el volumen multimedia en 0') } catch (err) { alert('Primero debe habilitar el permiso, ejecute el script nuevamente después de habilitarlo ') salir() } }







console.log('Comenzando a completar la tarea de Jingdong...')
console.log('Presione el botón para bajar el volumen para detener')

device.keepScreenDim(30 * 60 * 1000) // evita que la pantalla se atenúe durante 30 minutos

// Personaliza el método de salida para cancelar la
función de pantalla brillante quit() { device.cancelKeepingAwake() exit() }


// Supervise la función de la tecla para bajar el volumen
registerKey() { try { events.observeKey() } catch(err) { console.log('La tecla de volumen del monitor no se detuvo. Debería ser un error en el permiso de accesibilidad. Cierre la tarea en segundo plano del software y ejecútela de nuevo. ') console.log('Si aún no funciona, puede reiniciar el teléfono e intentarlo.') quit() } events.onKeyDown('volume_down', function (event) { console.log('Se detuvo la secuencia de comandos de la tarea Jingdong') console.log('Vuelva a la página principal manualmente') startCoin && console.log('Esta tarea comenzó con' + startCoin + 'monedas de oro') quit() }) } subprocesos.start(clave de registro)














// 自定义一个
función findTextDescMatchesTimeout findTextDescMatchesTimeout(reg, timeout) { let c = 0 while (c < timeout / 50) { let result = textMatches(reg).findOnce() || descMatches(reg).findOnce() if (resultado) devuelve resultado sleep(50) c++ } devuelve nulo }








// Abra Jingdong e ingrese la
función de actividad openAndInto() { console.log('Opening Jingdong App...') if (!launch('com.jingdong.app.mall')) { console.log('Puede que no ser instalado JD App') }



sleep(2000)
console.log('Ingrese a la página activa')

app.startActivity({ acción: "VER", datos: 'openApp.jdMobile://virtual?params={"categoría":"salto","acción":"a","des":"m"," sourceValue":"JSHOP_SOURCE_VALUE","sourceType":"JSHOP_SOURCE_TYPE","url":"https://u.jd.com/JCTuenU","M_sourceFrom":"mxz","msf_type":"auto"}' }) }



// Obtener el número de monedas de oro
function getCoin() { let ancla = className('android.view.View').filter(function (w) { if ((w.desc() && w.desc().match (/dividend :.*parts/)) || (w.text() && w.text().match(/dividend: .*parts/))) { return true } else { return false } } ) . findOne (5000) if (!anchor) { console.log('No se puede encontrar el control de dividendos') return false } let coin = ancla.parent().child(2).text() if (moneda) { return parseInt(moneda) } else { moneda = ancla.parent().child(3).text() // Puede haber un control insertado en el medio if (moneda) { return parseInt(moneda) } else { return false } } }






















// Abrir función de lista de tareas
openTaskList() { console.log('Abrir lista de tareas') let taskListButtons = findTextDescMatchesTimeout(/dividend+card/, 20000) if (!taskListButtons) { console.log('Error al abrir lista de tareas, cierre Jingdong y ejecute de nuevo!') quit() } if (taskListButtons.indexInParent() == 0) { taskListButtons = taskListButtons.parent().parent().children() } else { taskListButtons = taskListButtons.parent() .niños() }










let taskListButton = null
let flag = 0
for (let i = 3; i < taskListButtons.length; i++) { // 从第 4(4-1)个开始
if (taskListButtons[i].clickable()) { if ( flag) { taskListButton = taskListButtons[i] romper } else { flag = 1 continuar } } }








if (!taskListButton || !taskListButton.clickable()) { console.log('No se puede encontrar el control de lista de tareas') quit() } taskListButton.click() console.log('esperando lista de tareas') if (!findTextDescMatchesTimeout( / Recompensas de tareas acumuladas/, 10000)) { console.log('Parece que la lista de tareas no se puede abrir, ¡salga!') console.log('Si se abrió pero no se detectó, elimine la vista web versión 101 y superior o use la versión doméstica Pruebe la versión de mercado de aplicaciones de JD.') quit() } }










// Cerrar la función de la lista de tareas
closeTaskList() { console.log('Cerrar la lista de tareas') let jiangli = findTextDescMatchesTimeout(/Recompensas de tareas acumuladas/, 5000) if (!jiangli) { console.log('No se pudo encontrar el tarea recompensa logo' ) return false } let closeBtn = jiangli. parent(). child(1) return closeBtn. click() }








// Reabrir la
función de lista de tareas reabrirTaskList() { closeTaskList() sleep(3000) openTaskList() sleep(5000) }




// Obtener tareas sin terminar, de acuerdo con la identificación del número, devolver el botón de la tarea, la introducción de la tarea, la cantidad de la tarea (matriz)
función getTaskByText() { let tButton = null, tText = null, tCount = 0, tTitle = null console.log( 'Buscar tareas sin terminar...') let taskButtons = textMatches(/.*Examinar y seguir.*|.*Examinar.*s.*|.*Explorado acumulativamente.*|.*Explorar disponible.*|.*Ir a la fiesta .*|.*Brand Wall.*|.*Check in.*/).find() if (!taskButtons.empty()) { // Si no se encuentra la tarea, regrese directamente a (let i = 0; i < botones de tareas.longitud; i++) { let item = botones de tareas[i] tTitle = item.parent().child(1).text() let r = tTitle.match(/(d)/(d* )/) si (!r) continuar











tCuenta = (r[2] - r[1])

console.log(tTitle, tCount)
if (tCount) { // Si la resta de los números no es 0 prueba que no se completó
tText = item.text()
if (!autoJoin && tText.match(/successful membresía/)) continuar
si (tText.match(/order/)) continuar
tButton = item.parent().child(3)
break
}
}
}
return [tButton, tText, tCount, tTitle]
}

// Regrese a la lista de tareas y compruebe si tiene éxito, y vuelva a intentarlo una vez si no tiene éxito, con una
función de retraso backToList() { sleep(500) back() for (let i = 0; i < 3; i++ ) { // intentar regresar 3 veces if (!findTextDescMatchesTimeout(/recompensa de tarea acumulada/, 5000)) { console.log('Error en la devolución, reintentar devolución') sleep(2000) atrás() continuar } else { break } } dormir (3000) }













// Examinar tareas durante n segundos
function timeTask() { console.log('Esperando que se complete la tarea de exploración...') let c = 0 while (c < 40) { // 0.5 * 40 = 20 segundos para evitar un bucle infinito if ((textMatches(/get.*?gold/).exists() || descMatches(/get.*?gold/).exists())) // esperar a que se complete el descanso if ((textMatches(/ visto / ).exists() || descMatches(/browsed/).exists())) { // error console.log('límite superior, volver a actualizar la lista de tareas') return false }








// Procesamiento de ventana emergente
let pop = text('Actualizar miembro de tarjeta para recibir regalo')
if (pop.exists()) { pop.parent().parent().child(2).click() console. log ('Cerrar ventana emergente de membresía') }


sleep(500)
c++
}
if (c > 39) { console.log('No se detectó indicador de finalización de tarea.') return false } return true }




// Función de tarea de membresía
joinTask() { let check = textMatches(/.*Confirmar autorización para aceptar.*|.*Mis privilegios.*|.*Abrir tarjeta inmediatamente.*|.*Desbloquear todos los beneficios de membresía.*/) . findOne(8000) if (!check) { console.log('No se pudo encontrar el botón de membresía, se determinó que se unió a la membresía') return true } else if (check.text().match(/my privilegio/)) { console .log('Membresía ya, volver') return true } else { sleep(2000) if (check.text().match(/.*abrir tarjeta ahora.*|.*desbloquear todos los beneficios de membresía.*/) ) { let btn = check.bounds() console.log('Haga clic para abrir la tarjeta/desbloquear los beneficios, oculte automáticamente la consola') sleep(500) console.hide() sleep(500) click(btn.centerX(), btn.centerY()) sleep(500) console.show() check = textMatches(/.*Confirmar autorización significa estar de acuerdo.*/).findOne(8000) sleep(2000) }




















if (!check) { console.log('No se pudo encontrar la ventana emergente del botón para unirse, la carga falló') return false }


if (check.indexInParent() == 6) { check = check.parent().child(5) } else if (check.text() == 'Confirmar autorización significa estar de acuerdo') { check = check.parent() .child(0) } else { verificar = verificar.parent().parent().child(5) }





comprobar = comprobar.límites()

let x = comprobar.centerX()
let y = comprobar.centerY()

console.log('Detectar si hay oclusión')
let float = className('android.widget.ImageView')
.filter(function (w) { let b = w.bounds() return b.left <= x && b .derecha >= x && b.superior <= y && b.inferior >= y }).buscar()


if (float.length > 1) { console.log('Hay un bloqueo de ventana flotante, intente eliminarlo') if (device.sdkInt >= 24) { gesto(1000, [x, y], [x, y + 200 ]) console.log('La operación de eliminación se ha llevado a cabo, envíe sus comentarios si falla') } else { console.log('La versión de Android es baja, la ventana flotante no se puede eliminar automáticamente y la tarea de unión falló. Se requiere al menos Android 7.0.') return false } } else { console.log('No se encontró una ventana flotante bloqueada, continúe verificando') }










console.log('Se comprobará la autorización y la consola se ocultará automáticamente')
sleep(500)
console.hide()
sleep(500)
click(x, y)
sleep(500)
console.show()

console.log('Listo para hacer clic en el botón de membresía')
let j = textMatches(/^confirmar autorización (y unirse a la membresía de la tienda)*$/).findOne(5000)
if (!j) { console.log('No se puede para encontrar el botón de membresía, falló') return false } click(j.bounds().centerX(), j.bounds().centerY()) sleep(1000) console.log('Inscripción completada, volver') return cierto } }








// La tarea de buscar productos y agregar compras, el parámetro del carrito es el indicador de si agregar compras
function itemTask(cart) { console.log('esperando para ingresar a la lista de productos...') if (!textContains(' página actual').findOne (10000)) { console.log('No se pudo ingresar a la lista de elementos') return false } sleep(2000) let items = textContains('.jpg!q70').find() for ( let i = 0; i < items.length; i++) { if (carrito) { console.log('Comprar y navegar') let tmp = items[i].parent().parent() tmp.child(tmp. childCount() - 1).click() } else { console.log('Explorar la página del producto') items[i].parent().parent().child(4).click() } sleep(5000) console .log('返回') back() sleep(5000) let r = textContains('.jpg!q70').findOnce()





















if (!r) { back() sleep(5000) } if (i >= 4 - 1) { break } } return true }








// Función de tarea de compras
shopTask() { console.log('esperando entrar en la lista de compras...') let banner = textContains('like').findOne(10000) if (!banner) { console.log(' no Puede ingresar a la lista de tiendas. Regresar.') regresar falso } let c = banner.text().match(/(d)/(d*)/) if (!c) { c = 4 // hacer 4 veces } else { c = c[2] - c[1] } sleep(2000) console.log('going', c, 'times') let like = textContains('like').boundsInside(1, 0, device .width , device.height).findOnce() if (!like) { console.log('Error al encontrar el botón Me gusta. Volver.') return false } letbound = [like.bounds().centerX(), like .bounds ().centerY()] consola.log('se encuentra el botón Me gusta', enlazado)





















for (let i = 0; i < c; i++) { click(bound[0],bound[1]) console.log('Examinar la página de la tienda') sleep(8000) console.log('return') back( ) sleep(5000) let r = textContains('Me gusta').findOnce() if (!r) { back() sleep(5000) } } return true }













// Función de tarea de visita
viewTask() { console.log('Realizar una tarea de visita') sleep(5000) console.log('La tarea de visita regresa directamente') return true }




// Función de tarea de muro de marca
wallTask() { console.log('Realizar tarea de muro de marca') sleep(3000) for (let i of [2, 3, 4, 5, 6]) { // Elija 5 consolas. log ('Abrir uno') textContains('!q70').boundsInside(0, 0, device.width, device.height).findOnce(i).click() sleep(5000) console.log('return direct' ) back() let r = textContains('!q70').findOne(8000) if (!r) back() sleep(3000) } console.log('volver arriba') let root = textContains('hasta el final ' ) . _ ) abrirTaskList( ) devuelve verdadero }



















// La función de una sola tarea, ingrese automáticamente la tarea, regrese automáticamente a la lista de tareas, devuelva
la función booleana doTask(tButton, tText, tTitle) { let clickFlag = tButton.click() let tFlag if (tText.match(/ Navega y sigue.* s|Browse.*s/)) { console.log('Proceeding', tText) tFlag = timeTask() } else if (tText.match(/acumulative browser/)) { console.log(' Realización de tareas de navegación acumulativas' ) if (tText.match(/plus buy/)) { tFlag = itemTask(true) } else { tFlag = itemTask(false) } } else if (tText.match(/join/)) { console .log('Proceder a unirse a la tarea') tFlag = joinTask() } else if (tText.match(/navegar disponible|navegar y seguir|fiesta/)) { let tTitle = tButton.parent().child(1).text () if ( tTitle.match(/ciudad plantando hierba/)) { tFlag = shopTask()



















} else { tFlag = viewTask() } } else if (tText.match(/brand wall/)) { tFlag = wallTask() return tFlag // el muro de la marca no necesita regresar a la lista, regresar antes } else if (tText.match( /check in /)) { tFlag = clickFlag // haga clic una vez para devolver tFlag } else { console.log('tipo de tarea desconocido, el valor predeterminado es la tarea de navegación', tText) tFlag = timeTask() } backToList() return tFlag }














function signTask() { let ancla = className('android.view.View').filter(function (w) { return w.clickable() && (w.text() == 'para usar recompensa' || w. desc() == 'para usar la recompensa') }).findOne(5000)


if (!anchor) { console.log('No se encontró ningún botón de recompensa, no se pudo iniciar sesión') return false }


let ancla_index = ancla.indexInParent()
let sign = ancla.parent().child(anchor_index + 2) // para usar los dos últimos
sign.click()
sleep(3000)

sign = textMatches(/.*Haz clic en mí para iniciar sesión.*|.*Vuelve mañana.*/).findOne(5000)
if (!sign) { console.log('No se encontró el botón de inicio de sesión') return false }


if (sign.text().match(/vuelve mañana/)) { console.log('iniciado sesión') } else { click(sign.bounds().centerX(), sign.bounds().centerY( ) ) sleep(1000) console.log('Inicio de sesión completado')




// let next = textContains('Siguiente sobre rojo').findOne(5000)
// if (!next) { // console.log('No se pudo encontrar el indicador del siguiente sobre rojo y la ventana emergente podría no se cerrará automáticamente') // } else { // console.log('Cerrar la ventana emergente de inicio de sesión') // next.parent().child(0).click() // sleep(1000) // } }






// let title = text('Inicie sesión todos los días para recibir un sobre rojo grande').findOne(5000)
// if (!title) { // console.log('No se encontró el título y el signo- en la página no se cerró automáticamente.') // devuelve falso // } // console.log('Cerrar página de inicio de sesión') // title.parent().child(0).click() // sleep( 1000)





console.log('Comprueba si hay una ventana emergente de permiso de notificación')
if (textContains('Permiso de notificación').findOne(3000)) { console.log('Aparece una ventana emergente, ciérrala') text('Cancelar').click () sleep(1000) console.log('Detección secundaria') if (textContains('Permiso de notificación').findOne(3000)) { console.log('Aparece una ventana emergente , close') text('Cancel') .click() sleep(1000) console.log('Complete') } else { console.log('No hay ventana emergente, continuar.') } } else { console. log('No hay ventana emergente, continuar.') }














devolver verdadero
}

let startCoin = null // requerido para las teclas de volumen

// Global try catch para solucionar el error al mostrar un error
try { if (autoOpen) { openAndInto() console.log('esperando a que se cargue la página activa') if (!findTextDescMatchesTimeout(/.*Ir a usar recompensas. */, 8000)) { console.log('Error al ingresar la actividad, por favor vuelva a ejecutarla!') quit() } console.log('Ingresó exitosamente la actividad') sleep(2000)








openTaskList();
} else { alert('Cierre la ventana emergente e inmediatamente abra la aplicación Jingdong para ingresar a la página del evento manualmente y abra la lista de tareas', '30 segundos es el límite de tiempo') console.log ( 'Abra manualmente la aplicación Jingdong para ingresar a la página del evento y abra la lista de tareas') si (! !') quit() } console.log('Se ingresó el evento con éxito' ) }







dormir (5000)

try { console.log('Obtener la cantidad inicial de monedas de oro') startCoin = getCoin() console.log('Total actual' + startCoin + 'monedas de oro') } catch (err) { console.log('Error al obtener monedas de oro, saltar ', err) }





dormir (2000)

// bucle para completar todas las tareas
while (verdadero) { let [botóntarea, textotarea, recuentotarea, títulotarea] = getTaskByText()

if (!taskButton) { console.log('Recibir recompensas acumuladas') textContains('Ir a reclamar').find().forEach(function (e, i) { console.log('Recibir la primera' + (i + 1 ) + 'recompensas acumuladas') e.click() sleep(2000) })





console.log('Tarea de registro final')
signTask()

let endCoin = null
try { console.log('Obtener el número de monedas de oro al final') endCoin = getCoin() console.log('Total actual' + endCoin + 'Monedas de oro') } catch (err) { consola .log('Obtención de monedas de oro fallan, saltan', err) }





console.log('No hay tareas que se puedan completar automáticamente. Salga.')
console.log('Las tareas interactivas y las tareas de pedido deben completarse manualmente.')
if (startCoin && endCoin) { console.log('Esta la operación ha obtenido ' + (endCoin - startCoin) + 'monedas de oro') } else { console.log('Las monedas de oro obtenidas en esta operación no se pueden calcular. Consulte el registro por motivos específicos.') }



// alert('La tarea ha sido completada', '¡No olvides recibir el sobre rojo del Día de Año Nuevo en la página de inicio del script!') alert('
La tarea ha sido completada', 'Habrá nuevas tareas después de la la tarea interactiva se completa manualmente, se recomienda completar la interacción dos veces ejecutar el script')
quit()
}

if (taskText.match(/brand wall/)) { // brand wall 0/3 solo debe completarse una vez
taskCount = 1
}

// Realizar tareas de acuerdo con taskCount, completar un tipo de tareas juntas y actualizar la lista de tareas después de completarla
console.log('Proceed' + taskCount + 'times' + taskText + '" task')
for (let i = 0; i < taskCount; i++) { console.log('th' + (i + 1) + 'time') let taskFlag = doTask(taskButton, taskText, taskTitle) if (taskFlag) { console.log('Completado, proceder a la siguiente tarea ') } else { console.log('La tarea falló, intente reabrir la lista de tareas para obtener la tarea') break // Salir directamente, no es necesario llamar a reabrir aquí } } console.log('Reabrir la lista de tareas para obtener la tarea') reabrirTaskList( ) } } catch (err) { device.cancelKeepingAwake() if (err.toString() != 'JavaException: com.stardust.autojs.runtime.exception.ScriptInterruptedException: null') { consola.error(nuevo Error().pila, err)
















startCoin && console.log('Esta misión comenzó con' + startCoin + 'monedas de oro')
}
showVersion()
}
 

Supongo que te gusta

Origin blog.csdn.net/winkexin/article/details/131324358
Recomendado
Clasificación