ตัวเฝ้าดูอินเทอร์เฟซ (Interface Monitor)

Monitor ใช้สำหรับเฝ้าดูการเปลี่ยนแปลงของอินเทอร์เฟซแบบเรียลไทม์ และเมื่อตรงตามเงื่อนไขที่กำหนดไว้ล่วงหน้า จะดำเนินการที่กำหนดไว้ เช่น การคลิกองค์ประกอบ, การกดปุ่ม, หรือการบันทึกจำนวนครั้งที่เกิดขึ้น คุณสามารถเข้าใจได้ว่ามันคือการทำงานพื้นฐานของฟังก์ชันเช่น Li Tiaotiao หรือแอปที่คล้ายกันซึ่งใช้ในการข้ามโฆษณาโดยอัตโนมัติ เนื่องจากฟังก์ชันนี้จะทำการคลิกหรือกดปุ่มโดยอัตโนมัติ อาจทำให้เกิดการกระทำที่ไม่คาดคิดเมื่อต้องการให้ผู้ใช้เข้ามาควบคุมเอง ดังนั้นโปรดใช้งานด้วยความระมัดระวัง

เคล็ดลับ

โดยปกติแล้ว การลงทะเบียน monitor และ event ควรทำที่จุดเริ่มต้นของสคริปต์ และโดยทั่วไปจะไม่ทำอีกในระหว่างการทำงาน

การเปิดใช้งานตัวเฝ้าดู

อินเทอร์เฟซต่อไปนี้จะเปิดใช้งานตัวเฝ้าดูอินเทอร์เฟซ โดยค่าเริ่มต้นตัวเฝ้าดูจะอยู่ในสถานะปิดใช้งาน

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.set_watcher_loop_enabled(True)

การตรวจสอบสถานะการเปิดใช้งานของตัวเฝ้าดู

คุณสามารถใช้อินเทอร์เฟซต่อไปนี้เพื่อตรวจสอบว่าตัวเฝ้าดูอินเทอร์เฟซปัจจุบันเปิดใช้งานอยู่หรือไม่

d.get_watcher_loop_enabled()

การปิดใช้งานตัวเฝ้าดู

ปิดลูปของตัวเฝ้าดู จะไม่มีการประมวลผล event ที่ลงทะเบียนไว้โดยอัตโนมัติอีกต่อไป เช่น การคลิก

d.set_watcher_loop_enabled(False)

ข้อควรสนใจ

การลงทะเบียน event เฝ้าดูมากเกินไปอาจส่งผลกระทบต่อประสิทธิภาพของระบบหรือความเร็วในการตอบสนองของการทำงาน

การลบตัวเฝ้าดูทั้งหมด

ลบ event เฝ้าดูทั้งหมดที่ได้นำไปใช้แล้ว เพื่อล้างกฎที่ใช้โดยสคริปต์ก่อนหน้าหรือที่ถูกขัดจังหวะอย่างผิดปกติ ขอแนะนำให้รันคำสั่งนี้ทุกครั้งก่อนเริ่มสคริปต์เพื่อป้องกันไม่ให้ event ที่ลงทะเบียนโดยงานก่อนหน้าส่งผลกระทบต่อกระบวนการทำงานปัจจุบัน

d.remove_all_watchers()

การลงทะเบียน Click Event

Click event จะทำการคลิกโดยอัตโนมัติเมื่อมี selector ที่ตรงกันปรากฏขึ้นบนอินเทอร์เฟซ ตัวอย่างเช่น การข้ามหน้าต่างป๊อปอัปของซอฟต์แวร์โดยอัตโนมัติ เช่น ข้อตกลงการใช้งาน, การแจ้งเตือนการอัปเดต หรือการคลิกอัตโนมัติบนอินเทอร์เฟซที่เฉพาะเจาะจง

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")], Selector(textContains="同意", clickable=True))

คำแนะนำ

พารามิเตอร์ที่สองรองรับ Selector หลายตัว หมายความว่า event จะถูกประมวลผลก็ต่อเมื่อเงื่อนไขของ Selector ทั้งหมดตรงกัน

เมื่อลงทะเบียน event ดังกล่าว เมื่ออินเทอร์เฟซที่มีข้อความ "用户协议" (ข้อตกลงผู้ใช้) ปรากฏขึ้น จะทำการคลิกปุ่ม "同意" (ยอมรับ) โดยอัตโนมัติ

การลงทะเบียน Key Press Event

Key press event จะทำการกดปุ่มโดยอัตโนมัติเมื่อมี selector ที่ตรงกันปรากฏขึ้นบนอินเทอร์เฟซ เช่น การกดปุ่มย้อนกลับอัตโนมัติ ซึ่งสามารถหลีกเลี่ยงการเข้าสู่บางหน้าจอได้โดยอัตโนมัติ แน่นอนว่าการใช้ click event ก็สามารถบรรลุผลลัพธ์เดียวกันได้

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)

คำแนะนำ

พารามิเตอร์ที่สองรองรับ Selector หลายตัว หมายความว่า event จะถูกประมวลผลก็ต่อเมื่อเงื่อนไขของ Selector ทั้งหมดตรงกัน

เมื่อลงทะเบียน event ดังกล่าว เมื่ออินเทอร์เฟซที่มีข้อความ "个人中心" (ศูนย์ส่วนตัว) ปรากฏขึ้น จะทำการกดปุ่ม HOME ของโทรศัพท์โดยอัตโนมัติ

การลงทะเบียน Count Event

Count event คือการเพิ่มตัวนับขึ้น 1 เมื่อมีการดำเนินการที่ตรงกับ selector บางอย่างปรากฏขึ้นบนอินเทอร์เฟซ เมื่อมีข้อมูลสำคัญที่ปรากฏขึ้นและหายไปอย่างรวดเร็วบนหน้าจอ คุณสามารถใช้ฟังก์ชันนี้เพื่อนับว่าอินเทอร์เฟซบางอย่างเคยปรากฏขึ้นหรือไม่ หรือปรากฏขึ้นกี่ครั้ง

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])

คำแนะนำ

พารามิเตอร์ที่สองรองรับ Selector หลายตัว หมายความว่า event จะถูกประมวลผลก็ต่อเมื่อเงื่อนไขของ Selector ทั้งหมดตรงกัน

event ข้างต้นจะบันทึกจำนวนครั้งที่อินเทอร์เฟซที่มีข้อความ "好的" (ตกลง) ปรากฏขึ้น ใช้ินเทอร์เฟซต่อไปนี้เพื่อรับจำนวนครั้งที่ count event ถูกทริกเกอร์

d.get_watcher_triggered_count("RecordElementAppearTimes")

การเปิดใช้งาน Event

หลังจากลงทะเบียน event แล้ว จะต้องเปิดใช้งานเพื่อให้ event นั้นถูกลงทะเบียนในลูปของตัวเฝ้าดูอินเทอร์เฟซ มิฉะนั้นจะไม่มีผล

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.set_watcher_enabled("RecordElementAppearTimes", True)

การปิดใช้งาน Event

คุณสามารถเรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อให้ตัวเฝ้าดูอินเทอร์เฟซยกเลิกการเฝ้าดู event ที่ระบุ

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.set_watcher_enabled("RecordElementAppearTimes", False)

การลบ Event

ลบ event ออกจากตัวเฝ้าดูโดยสมบูรณ์ และจะถูกลบออกจากรายการ event ที่ลงทะเบียนไว้ด้วย

d.remove_watcher(name)

การตรวจสอบสถานะการเปิดใช้งานของ Event

เรียกใช้อินเทอร์เฟซต่อไปนี้เพื่อตรวจสอบว่า event ถูกเปิดใช้งานอย่างถูกต้องหรือไม่ เพื่อป้องกันกรณีที่ลงทะเบียนแล้วแต่ไม่ได้เปิดใช้งาน

d.get_watcher_enabled(name)

Advanced Selector

นอกจากการรองรับ selector แบบง่ายแล้ว คุณยังสามารถใช้ selector ที่ซับซ้อนมากขึ้นเพื่อจับคู่องค์ประกอบได้อีกด้วย ตัวอย่างต่อไปนี้แสดงวิธีการเขียน selector ที่ซับซ้อน

d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(resourceId="com.android.market:id/v_app_item").child(index=3).sibling(index=2).child(index=2).child()], Keys.KEY_HOME)

โค้ดตัวอย่างฉบับสมบูรณ์

ด้านล่างนี้คือบล็อกโค้ดตัวอย่าง ซึ่งเปิดใช้งานลูปของตัวเฝ้าดูและลงทะเบียน event เฝ้าดูสามประเภท เมื่ออินเทอร์เฟซที่มีข้อความ "用户协议" (ข้อตกลงผู้ใช้) ปรากฏขึ้น จะทำการคลิก "ยอมรับ" โดยอัตโนมัติ, เมื่ออินเทอร์เฟซที่มีข้อความ "个人中心" (ศูนย์ส่วนตัว) ปรากฏขึ้น จะกลับไปที่หน้าจอหลักทันที, และเมื่ออินเทอร์เฟซที่มีข้อความ "好的" (ตกลง) ปรากฏขึ้น จะบันทึกจำนวนครั้งที่อินเทอร์เฟซนี้ปรากฏ

ข้อควรสนใจ

การดำเนินการใดๆ ที่ตรงกับ event ที่เกิดขึ้นบนอินเทอร์เฟซก่อนที่จะเปิดใช้งานตัวเฝ้าดูหรือเปิดใช้งาน event จะไม่ถูกประมวลผล!
d.remove_all_watchers()
d.set_watcher_loop_enabled(True)

d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")],
                                         Selector(textContains="同意", clickable=True))
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])

d.set_watcher_enabled("ClickAcceptWhenShowAggrement", True)
d.set_watcher_enabled("PressBackWhenHomePageShows", True)
d.set_watcher_enabled("RecordElementAppearTimes", True)