자동화가 막히는 자리는 대개 브라우저 밖입니다
이틀 동안 브라우저 자동화가 세 번 멈췄습니다. 셋 다 코드가 틀려서가 아니었고, 셋 다 브라우저 안이 아니라 밖에서 막혔습니다. 막힌 자리를 정리해 두면 다음에 같은 곳에서 시간을 안 들입니다. 그리고 셋을 나란히 놓으니 처리 방법이 세 가지뿐이라는 것도 보였습니다.


이틀 동안 브라우저 자동화가 세 번 멈췄습니다. 셋 다 코드가 틀려서가 아니었고, 셋 다 브라우저 안이 아니라 밖에서 막혔습니다.
막힌 자리를 정리해 두면 다음에 같은 곳에서 시간을 안 들입니다. 그리고 셋을 나란히 놓으니 처리 방법이 세 가지뿐이라는 것도 보였습니다.

첫째 — 파일 선택 창
파일을 올리는 버튼을 누르면 운영체제 파일 창이 뜹니다. 그 순간 자동화는 끝입니다. 창은 브라우저 밖이라 클릭도 입력도 닿지 않고, 열린 채로 두면 그다음 명령도 안 먹습니다.
흔히 떠올리는 우회는 다 막혀 있습니다. 보안상 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 창을 연다 | 경계를 옮긴다 — 창이 열리기 전에 안에서 가로챈다 |
화면 녹화 권한 | 운영체제가 화면을 안 준다 | 안쪽으로 옮긴다 — 찍히는 프로그램이 스스로 저장하게 한다 |
도메인 차단 | 도구의 정책이다 | 인정하고 비용을 줄인다 — 사람 몫으로 남기되 준비를 다 해 둔다 |
뚫는 것은 셋 중에 없습니다. 경계를 옮기거나, 안쪽으로 옮기거나, 인정하거나입니다. 그리고 어느 쪽인지는 대개 두세 번 시도해 보면 갈립니다. 같은 응답이 세 번 나오면 그건 세 번째입니다.
덤 — 같은 자리에서 만난 함정 셋
파일은 올라갔는데 그다음에 걸린 것들입니다. 사이트마다 다르고, 어느 문서에도 안 적혀 있습니다.
미디어를 붙인 뒤에는 작성자를 못 바꾸는 곳이 있습니다. 개인 계정에서 회사 계정으로 바꾸려면 첨부를 지우라고 합니다. 순서를 뒤집어야 합니다 — 작성자를 먼저 고르고 파일을 붙입니다.
본문에 주소를 넣으면 링크 카드가 첨부를 밀어내는 곳이 있습니다. 영상을 붙였는데 주소를 쓰는 순간 카드로 바뀌어 있었습니다. 카드를 지우고 파일을 다시 붙이면 됩니다.
임시 저장된 초안이 되살아납니다. 작성창을 열었는데 다른 작업의 글이 들어 있었습니다. 확인창이 뜨면 「이어서」가 아니라 「새로」를 고릅니다. 안 뜨는 곳도 있으니 붙여넣기 전에 창이 비어 있는지 봅니다.
셋 다 화면을 한 번 보면 알 수 있는 것들입니다. 반대로 말하면, 보지 않고 다음 단계로 넘어가면 그대로 나갑니다.
정리
자동화가 멈추면 코드부터 보게 됩니다. 그런데 이틀 동안 세 번 다 코드가 아니었습니다. 운영체제, 권한, 도구 정책이었습니다.
그래서 요즘은 막히면 먼저 묻습니다. 이 경계가 브라우저 안인가 밖인가. 안이면 고치고, 밖이면 옮기거나 인정합니다. 밖에 있는 것을 안에서 뚫으려고 하면 그 시간이 제일 오래 걸립니다.
여러분은 자동화가 막혔을 때, 그것이 코드 문제인지 경계 문제인지 무엇으로 가르십니까.
이 글이 도움이 되셨다면 공유해 주세요
새 글이 올라오면 메일로 알려드립니다
제조 현장에서 확인한 것들을 기록합니다. 회사 홍보 메일은 보내지 않고, 언제든 해지할 수 있습니다.
제조 AI 성숙도 자가진단 — 회사 정보 없이 10문항이면 됩니다.

제조 AI 운영체제 VEXPLOR를 만들고 있습니다. 스마트공장 구축 현장에서 데이터 표준화·온톨로지·디지털트윈·자율형공장을 다루며, 이 블로그에는 현장에서 실제로 부딪힌 문제와 그때 내린 판단을 씁니다.
contact@wace.me이 문제를 실제 현장에서 풀고 있습니다
(주)웨이스는 제조 AI 운영체제 VEXPLOR로 데이터 표준화부터 자율형공장까지 만들어가고 있습니다. 공장 밖 사무 업무를 AI로 바꾸는 일을 우리가 먼저 해 보고 정리한 것입니다.
함께 읽어보세요
운반은 한 대를 빠르게 해서 빨라지지 않습니다 — AMR과 설비를 군집으로 제어해야 하는 이유
공장에서 설비 한 대의 성능을 올리는 일은 대개 그 설비 안에서 끝납니다. 프레스를 빠르게 하면 프레스가 빨라집니다. 옆 설비에 물어볼 것이 없습니다. 운반은 그렇지 않습니다. AMR 한 대를 빠르게 해도 라인은 그만큼 빨라지지 않습니다.

저희 공장 시뮬레이터가 2ms마다 무엇을 계산하는지 적었습니다
저희가 만드는 공장 시뮬레이터를 462초 돌렸습니다. 생산 지시가 26번 나갔고, 10개가 라인에 들어갔고, 4개는 로봇이 집어 AMR에 싣고 건너편 로봇이 내려놓는 데까지 갔습니다. 접촉을 9,243번 재는 동안 AMR이 벽이나 다른 AMR에 닿은 횟수는 0이었습니다.

검사 결과가 0건일 때, 없는 것과 검사가 고장 난 것을 어떻게 가릅니까
검사를 돌렸는데 결과가 0건으로 나왔습니다. 이때 우리는 보통 안심합니다. 걸린 게 없다는 뜻이니까요. 그런데 0은 두 가지를 동시에 뜻합니다. 정말 없거나, 검사가 고장 났거나. 이 둘은 화면에서 똑같이 생겼습니다. 오류 메시지도, 빨간 글자도, 종료 코드 1도 없습니다. 그냥 조용히 0입니다.
