Playwright 고정 대기 대신 상태 대기를 써야 하는 이유
·
IT
브라우저 자동화 코드에서 wait_for_timeout(800) 같은 고정 대기는 "이 정도면 되겠지"라는 추측이다. 추측은 빠른 날엔 낭비고 느린 날엔 버그다. 이 글은 티스토리 에디터를 HTML 모드로 전환한 직후 본문을 넣었더니 내용이 통째로 사라졌던 일을 통해, 고정 대기가 어떻게 레이스 컨디션을 만들고 상태 대기가 왜 그것을 없애는지 다룬다.전환이 끝나기 전에 넣은 본문은 초기화와 함께 사라진다티스토리 에디터는 기본모드(TinyMCE)에서 HTML 모드(CodeMirror)로 바꿀 수 있다. 첫 구현은 이랬다.page.click("#editor-mode-layer-btn-open")page.wait_for_timeout(300)page.click("#editor-mode-html")page.wa..
Playwright intercepts pointer events 해결
·
IT
Playwright로 티스토리 글 관리 화면에서 글 하나를 삭제하려다 같은 오류를 여섯 번 만났다. … from subtree intercepts pointer events. 체크박스가 분명히 화면에 있는데 클릭이 닿지 않는다. 이 글은 이 오류가 무엇을 뜻하는지, 흔히 쓰는 force=True가 왜 이 경우엔 오히려 해로웠는지, 그리고 결국 무엇으로 해결했는지를 다룬다. 결론은 "가로채는 요소를 치우거나, 포인터를 쓰지 않거나" 둘 중 하나다.오류 메시지는 클릭 지점에 다른 요소가 있다는 뜻이다Playwright는 클릭 전에 몇 가지 조건을 검사한다. 문서가 "actionability checks"라 부르는 것으로, 요소가 보이는지, 움직임이 멈췄는지, 활성화됐는지, 그리고 포인터 이벤트를 받는지다...
Playwright 파일 업로드, input 없는 사이트 처리법
·
IT
Playwright로 파일을 올릴 때 첫 선택지는 set_input_files()다. 그런데 어떤 사이트는 DOM에 이 아예 없다. 버튼을 누르는 순간 브라우저의 네이티브 파일 선택창이 뜨고, 자동화 도구는 그 창을 조작할 수 없어 멈춘다. 이 글은 티스토리 에디터가 정확히 이런 구조였고, expect_file_chooser()로 어떻게 넘겼는지를 다룬다. 핵심은 DOM에서 input을 찾는 것을 포기하고, 파일 선택창이 열리는 이벤트를 받는 것이다.DOM 어디에도 input type=file 이 없었다티스토리 에디터의 첨부 메뉴를 열면 사진, 파일, 슬라이드쇼 세 항목이 나온다. 사진(#attach-image)을 누르면 운영체제의 파일 선택창이 뜬다. 자동화라면 당연히 그 뒤에 숨은 을 찾아 set_i..
Playwright로 티스토리 글 올리기, 본문이 빈 채 저장되던 이유
·
IT
티스토리 오픈 API가 2024년 2월에 완전히 문을 닫은 뒤로, 글을 프로그램으로 올리는 길은 브라우저를 직접 조작하는 것뿐이다. 이 글은 Playwright로 티스토리 에디터를 자동화하다가 겪은 가장 당혹스러운 문제, 즉 스크립트는 성공했다고 하는데 열어보면 제목만 있고 본문이 비어 있는 현상의 원인과 해결을 다룬다. 결론을 먼저 말하면, 에디터의 자바스크립트 API로 값을 넣으면 화면에는 보이지만 저장되지 않고, 실제 키 입력으로 넣어야 저장된다.오픈 API가 사라진 자리를 브라우저 자동화가 메운다티스토리는 2023년 12월 22일 공지에서 오픈 API를 "파일 첨부 > 글 관련 기능 > 댓글 관련 기능 > 그 외 기능" 순으로 2024년 2월 말까지 순차 종료한다고 알렸다. 그 뒤로 POST /p..