2018年6月7日 星期四

為 WDA 加入新指令

機緣巧合之下,找到了一個有趣的程式。它利用 Facebook 的 WebDriverAgent 及 Python 程序來控制手機內的《抖音》應用程式,利用臉部識別去找出顏值高於 80 的美女,並進行關注。吸引到我的地方不是美女,而是控制 iOS 的方法,亦即是 WDA。

過往也曾試過分析 iPhone 的遊戲畫面,開發計算出最好步數的指導器;但當時卻沒能把結果傳回 iPhone。一直希望能得到解決。現在 WDA 有望能達到這樣的效果。我嘗試用 WDA 去玩一個遊戲,可是當中需要快速連擊,而 WDA 本身沒有支援,於是動手修改一下 ~/anaconda3/lib/python3.6/site-packages/wda/__init__.py:
    ##  2018.06.07 Pacess
    def sequenceTap(self, list):
        return self.http.post('/wda/sequenceTap', dict(taps=list))
    ##  2018.06.07 End

在 FBElementCommands.m 的 + (NSArray *)routes 加入:
[[FBRoute POST:@"/wda/sequenceTap/"] respondWithTarget:self action:@selector(handleSequenceTap:)],

及加入新的函數:
//  Sequence-tap by Pacess
+ (id<FBResponsePayload>)handleSequenceTap:(FBRouteRequest *)request  {
   CGPoint tapPoint = CGPointZero;
   NSArray *tapArray = (NSArray *)request.arguments[@"taps"];
   NSInteger count = [tapArray count];
   for (int i=0; i<count; i+=2)  {

      CGFloat x = [[tapArray objectAtIndex:i] doubleValue];
      CGFloat y = [[tapArray objectAtIndex:i+1] doubleValue];
      tapPoint = CGPointMake(x, y);
      XCUICoordinate *tapCoordinate = [self.class gestureCoordinateWithCoordinate:tapPoint application:request.session.application shouldApplyOrientationWorkaround:isSDKVersionLessThan(@"11.0")];
      [tapCoordinate tap];
   }
   return FBResponseWithOK();
}

沒有留言: