Seleniumを使ってあるブラウザゲームの自動プレイが出来たら良いなと思い、自動でログインから所定の動作をするPythonスクリプトを作成してみました。  
スクリプトは以下の様な内容です。

```

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    
    ## ブラウザ上のある位置を起点にx,yで位置指定して
    ## クリック
    def click(act, target, x, y):
        act.move_to_element(target)
        act.move_by_offset(x, y)
        act.click()
        act.move_to_element(target)
        act.perform()
    
    b = webdriver.Chrome()
    b.set_window_size(1200,700)
    b.get(url)
    
    target = b.find_element_by_class_name(element)
    action = webdriver.ActionChains(b)
    
    ## 上から順に150pxずつ並んでいるボタンをクリック
    ### 1個目
    click(action, target, 400, 400)
    time.sleep(10)
    
    ### 2個め
    click(action, target, 400, 550)
    time.sleep(10)
    
    ### 3個め
    click(action, target, 400, 700)
    time.sleep(10)
    b.close()
    
```

このゲームはFlashで作られていて、iframe内のhtmlにてflashをロードするような仕組みになっています。コードは本来の物とは若干違いますが大枠動作の内容は同じです。

これで、3個目のクリック時に本来クリックさせたい所とは別の場所がクリックされてしまうのです。値をどのように変えても、押下される場所が変わらなくなってしまいます。

さらにここで、遷移先の画面にてクリックを実行しようとしても以降どのような座標のクリックも受け付けなく？なったかのようにどのような操作も受け付けません。

ある他のFlashで出来たブラウザゲームでも同様の事が発生しています。Flashで出来ているので、画面遷移などはFlashのタイムライン上に作成されていてActionScriptで内部で制御されてると思うのですが、ちょうどActionScriptが無い状態で勝手にアニメーションが走ってしまうような症状と同じような現象に見えます。

Seleniumはブラウザをそのまま操作しているはずなので、こういった事は起こらない仕様だと思うのですが、なぜ起こるのか不思議でなりません。技術的な仕組みを完全に理解できていないがゆえの疑問かもしれませんが、どなかた思い当たる部分など御座いましたら是非アドバイス頂けたら嬉しいです。

それでは、よろしくお願いします。
CC BY-SA 3.0
2015-11-03T13:54:54.513
18371
2015-11-03T15:08:22.860
2015-11-03T15:08:22.860
7290
13091
question
selenium flash selenium-webdriver
SeleniumでFlashの操作をする時の誤動作？について