#운영 #프로덕트
자동화가 막히는 자리는 대개 브라우저 밖입니다

이틀 동안 브라우저 자동화가 세 번 멈췄습니다. 셋 다 코드가 틀려서가 아니었고, 셋 다 브라우저 안이 아니라 밖에서 막혔습니다.

막힌 자리를 정리해 두면 다음에 같은 곳에서 시간을 안 들입니다. 그리고 셋을 나란히 놓으니 처리 방법이 세 가지뿐이라는 것도 보였습니다.

자동화가 막히는 자리는 대개 브라우저 밖입니다 — 안쪽은 코드가 닿는 페이지, 주황 점선 바깥은 운영체제와 도구 정책

첫째 — 파일 선택 창

파일을 올리는 버튼을 누르면 운영체제 파일 창이 뜹니다. 그 순간 자동화는 끝입니다. 창은 브라우저 밖이라 클릭도 입력도 닿지 않고, 열린 채로 두면 그다음 명령도 안 먹습니다.

흔히 떠올리는 우회는 다 막혀 있습니다. 보안상 input.value 에 경로를 넣을 수 없고, 좌표 클릭은 창이 브라우저 밖이라 안 되고, 드래그·드롭을 흉내 내려면 결국 File 객체가 필요합니다.

그런데 파일 창을 여는 것은 사이트가 아니라 그 페이지 안의 코드입니다. 대개 이렇게 생겼습니다.

const input = document.createElement('input');
input.type = 'file';
input.onchange = handle;
input.click();    // ← 여기서 OS 창이 열린다

그러면 그 한 줄만 못 하게 막으면 됩니다.

const original = HTMLInputElement.prototype.click;
HTMLInputElement.prototype.click = function () {
  if (this.type === 'file') return;  // 파일 창만 안 연다
  return original.apply(this, arguments);
};

이렇게 두고 버튼을 누르면 창은 안 뜨는데 input 은 DOM 에 그대로 남습니다. 그 요소에 파일을 넣으면 사이트가 보기에 사람이 고른 것과 같습니다. 자동화 도구를 쓰신다면 이 지점이 setInputFiles 가 하는 일입니다.

함정 하나 — 위 코드에서 보이듯 input 은 버튼을 누르는 순간 만들어집니다. 미리 찾아 두려고 DOM 을 뒤지면 아무것도 없습니다. 가로채기를 먼저 걸고, 버튼을 누르고, 그다음에 찾아야 합니다.

둘째 — 화면 녹화 권한

돌아가는 화면을 영상으로 남겨야 했는데 screencapture 가 could not create image from display 로 거부했습니다. 운영체제 권한 문제라 코드로 넘을 수 없습니다.

권한을 켜면 되지만, 켜려면 터미널을 다시 시작해야 하고 그러면 하던 작업이 끊깁니다.

여기서 방향을 바꿨습니다. 밖에서 못 찍으면, 찍히는 쪽이 스스로 찍게 합니다. 그 화면이 제가 고칠 수 있는 프로그램이라면 「N밀리초마다 자기 창을 저장하라」는 옵션을 하나 넣는 편이 빠릅니다. 실제로 그렇게 하니 프레임당 비용도 오히려 낮아졌습니다. 창 밖에서 화면 전체를 뜨는 것보다 안에서 위젯 하나를 그리는 것이 싸기 때문입니다.

밖에서 관측하려다 막히면, 안에서 내보내게 만드는 쪽을 봅니다.

셋째 — 도메인 차단

세 번째는 못 넘었습니다.

쓰고 있던 브라우저 확장이 특정 도메인 전체를 막고 있었습니다. 사이트 권한을 열어도 같았습니다. 사용자가 켜는 권한과 별개인 내장 차단 목록이었기 때문입니다.

여기서 시간을 더 쓰면 안 됩니다. 새 탭에서도, 다른 하위 도메인에서도 같은 응답이면 그건 설정이 아니라 정책입니다.

대신 사람이 들이는 시간을 줄이는 쪽으로 갔습니다. 붙여넣을 본문을 클립보드에 담아 두고, 이미지가 든 폴더를 열어 두고, 어떤 값이 어디에 들어가는지 순서대로 적어 둡니다. 자동화는 못 해도, 사람이 그 자리에서 들이는 시간은 줄일 수 있습니다.

셋을 나란히 놓으면

처리 방법이 세 가지뿐이었습니다.

막힌 것어디가 경계인가처리
파일 선택 창페이지 코드가 OS 창을 연다경계를 옮긴다 — 창이 열리기 전에 안에서 가로챈다
화면 녹화 권한운영체제가 화면을 안 준다안쪽으로 옮긴다 — 찍히는 프로그램이 스스로 저장하게 한다
도메인 차단도구의 정책이다인정하고 비용을 줄인다 — 사람 몫으로 남기되 준비를 다 해 둔다

뚫는 것은 셋 중에 없습니다. 경계를 옮기거나, 안쪽으로 옮기거나, 인정하거나입니다. 그리고 어느 쪽인지는 대개 두세 번 시도해 보면 갈립니다. 같은 응답이 세 번 나오면 그건 세 번째입니다.

덤 — 같은 자리에서 만난 함정 셋

파일은 올라갔는데 그다음에 걸린 것들입니다. 사이트마다 다르고, 어느 문서에도 안 적혀 있습니다.

  • 미디어를 붙인 뒤에는 작성자를 못 바꾸는 곳이 있습니다. 개인 계정에서 회사 계정으로 바꾸려면 첨부를 지우라고 합니다. 순서를 뒤집어야 합니다 — 작성자를 먼저 고르고 파일을 붙입니다.
  • 본문에 주소를 넣으면 링크 카드가 첨부를 밀어내는 곳이 있습니다. 영상을 붙였는데 주소를 쓰는 순간 카드로 바뀌어 있었습니다. 카드를 지우고 파일을 다시 붙이면 됩니다.
  • 임시 저장된 초안이 되살아납니다. 작성창을 열었는데 다른 작업의 글이 들어 있었습니다. 확인창이 뜨면 「이어서」가 아니라 「새로」를 고릅니다. 안 뜨는 곳도 있으니 붙여넣기 전에 창이 비어 있는지 봅니다.

셋 다 화면을 한 번 보면 알 수 있는 것들입니다. 반대로 말하면, 보지 않고 다음 단계로 넘어가면 그대로 나갑니다.

정리

자동화가 멈추면 코드부터 보게 됩니다. 그런데 이틀 동안 세 번 다 코드가 아니었습니다. 운영체제, 권한, 도구 정책이었습니다.

그래서 요즘은 막히면 먼저 묻습니다. 이 경계가 브라우저 안인가 밖인가. 안이면 고치고, 밖이면 옮기거나 인정합니다. 밖에 있는 것을 안에서 뚫으려고 하면 그 시간이 제일 오래 걸립니다.

여러분은 자동화가 막혔을 때, 그것이 코드 문제인지 경계 문제인지 무엇으로 가르십니까.

이 글은 https://blog.vexplor.com/post/automation-breaks-outside-the-browser 에 먼저 실렸습니다.

링크 복사

댓글 0
댓글이 없습니다.
추천 아티클
0