반응형
모 사이트에서 특정 작업을 반복하는 앱을 만들었는데, 만들고나니 계속해서 팝업(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
반응형
'C#' 카테고리의 다른 글
[C#] 시리얼 통신 - C#으로 아두이노와 시리얼 통신하기 (0) | 2020.10.15 |
---|---|
[C#] 매크로 만들기 ver.2 - 마우스 클릭 매크로 (0) | 2020.10.15 |
[C#] 파일 읽기 (0) | 2020.10.05 |
[C#] 클래스 / 클래스 리스트 연습 (0) | 2020.10.05 |
[C#] 웹 브라우저 제어2 - WPF browser 사용 (0) | 2020.10.04 |
최근댓글