반응형

모 사이트에서 특정 작업을 반복하는 앱을 만들었는데, 만들고나니 계속해서 팝업(alert)이 떠버리는 바람에 내가 앞에 앉아서 클릭을 하고 있어야 하는 문제가 발생했다.

찾아보니 javascript injection으로 javascript: alert(); 스크립트를 막아버리는 수가 있는데, 내가 작업한 사이트에선 그게 안된다.

그래서 마우스클릭 이벤트를 발생시켜야 하는데, 단순히 클릭하는 스크립트만 넣으면 문제가 발생했다.
문제점: alert 발생 -> C# browser에서 alert 해결 될 때까지 focus 놓침 -> 마우스 클릭 동작이 안됨.

그래서 쓰레드(Thread)를 넣어서 클릭이벤트를 실행해야 한다. 어렵진 않은데 매번 레퍼런스 찾아보려니 귀찮다. 잊어버리면 안되니 메모.

        [DllImport("user32.dll")]
        static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, int dwExtraInfo);
        const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        const int MOUSEEVENTF_LEFTUP = 0x0004;
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);

        static async void CloseAlert()
        {
            Debug.WriteLine("clickThread: " + Thread.CurrentThread.ManagedThreadId);
            await Task.Delay(500);
            SetCursorPos(1060, 600);
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
            Thread.Sleep(100);
            mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            Thread.Sleep(100);
        }

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기