Skip to main content

Automated Playwright installer for Android Termux (aarch64)

Project description

Termux-Playwright Automated Integration (S7 Edge Crawler)

1. 개요 (Overview)

본 프로젝트는 자원이 제한적인 안드로이드 디바이스(Samsung Galaxy S7)의 가상 리눅스 환경(Termux)에서 최신 동적 웹 스크래핑 프레임워크인 Playwright를 구동하기 위한 인프라 구축 및 자동화 데모 프로젝트입니다. 일반적으로 aarch64 안드로이드 환경에서는 공식 Playwright 바이너리가 호환되지 않아 구동이 불가능하지만, 본 프로젝트는 의존성 우회 설치 및 코어 엔진 패치를 통해 이 한계를 극복하고 24/7 무인 자동화 데이터 수집(Crawling)을 가능하게 합니다.

2. 기술 (Technology Stack)

  • OS & Environment: Android 8.0 (Termux), Linux (aarch64)
  • Language: Python 3.11+, Node.js (v20+)
  • Framework: Playwright (Async API)
  • Browser: Chromium (Termux native package)
  • Infrastructure: Bash Shell Scripting (node_manager.sh)

3. 로직 (Architecture & Logic)

본 시스템은 안드로이드 아키텍처의 한계를 우회하기 위해 다음과 같은 3단계 핵심 로직으로 구성됩니다.

  1. 의존성(Dependency) 속임수 기법 (Wheel Renaming)

    • PyPI에서 제공하는 manylinux_2_17_aarch64 규격의 Playwright 휠(Wheel) 파일을 강제로 다운로드합니다.
    • 단말기의 OS 종속성 검사를 피하기 위해 파일명을 none-any.whl로 변조하여 강제 설치(--force-reinstall --no-deps)를 수행합니다.
  2. 코어 엔진 런타임 패치 (Runtime Injection)

    • Playwright 내부의 Node.js 구동 엔진(coreBundle.js)은 시스템 환경이 android로 식별될 경우 즉시 process.exit(1)을 호출하여 실행을 중단합니다.
    • Python 스크립트를 통해 coreBundle.js 내부 최상단에 Object.defineProperty(process, "platform", {value: "linux"}); 코드를 주입(Inject)하여 플랫폼 검증 로직을 무력화합니다.
  3. 환경 변수 매핑 및 브라우저 샌드박스 비활성화

    • Playwright가 내장 브라우저가 아닌 Termux 패키지의 순정 Chromium(PLAYWRIGHT_CHROMIUM_PATH)과 Node.js(PLAYWRIGHT_NODEJS_PATH)를 사용하도록 환경변수를 바인딩합니다.
    • 런타임 실행 시 안드로이드 커널과의 충돌을 방지하기 위해 샌드박스 해제 플래그(--no-sandbox, --disable-setuid-sandbox)를 반드시 포함합니다.

4. 트러블슈팅 및 롤백 히스토리 (History of Failures)

본 인프라가 안정화되기까지 겪었던 기술적 실패와 해결 과정의 기록입니다.

  • [실패 1] 순정 pip install playwright 시도

    • 현상: 컴파일 에러 및 브라우저 바이너리 다운로드 실패.
    • 원인: Playwright가 지원하는 aarch64 빌드는 Ubuntu/Debian 베이스를 상정하며, 안드로이드 Bionic libc와 호환되지 않음.
    • 해결: Termux 패키지 관리자(pkg)가 제공하는 네이티브 chromium을 사용하도록 경로를 수동 할당함.
  • [실패 2] Node.js 실행 거부 (Platform Exception)

    • 현상: Python 스크립트 실행 시 Error: Unsupported platform: android 발생 후 크래시.
    • 원인: Playwright의 Node.js 브릿지가 안드로이드를 식별하여 명시적으로 차단함.
    • 해결: 런타임 환경에서 process.platformlinux로 강제 오버라이딩하는 자바스크립트 주입 패치 고안.
  • [실패 3] 브라우저 Launch 시 Zombie Process 생성 및 타임아웃

    • 현상: 브라우저 인스턴스는 생성되나 페이지 이동이 불가능하고 30초 후 타임아웃 됨.
    • 원인: 안드로이드 OS 커널의 권한 통제 메커니즘이 Chromium의 샌드박스(Sandbox) 프로세스 생성을 차단함.
    • 해결: Launch Args에 --no-sandbox--disable-setuid-sandbox 플래그를 추가하여 권한 충돌 해소.

이러한 수많은 시행착오 끝에, 단일 스크립트(node_manager.sh) 실행만으로 안드로이드 디바이스를 완전한 무인 크롤링 서버로 변환할 수 있는 파이프라인이 완성되었습니다.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

termux_playwright-1.61.0.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

termux_playwright-1.61.0-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file termux_playwright-1.61.0.tar.gz.

File metadata

  • Download URL: termux_playwright-1.61.0.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.0

File hashes

Hashes for termux_playwright-1.61.0.tar.gz
Algorithm Hash digest
SHA256 3fdc705fa8f46e6e82ae74ae7d1672e36f490b77f0da4dd7f236eaeb8b863996
MD5 91844591421f519eeedc35574a1a99c2
BLAKE2b-256 0744046c85710c3be40bfb72e4cb382073ba69987e0e5663074d67ce91b434d8

See more details on using hashes here.

File details

Details for the file termux_playwright-1.61.0-py3-none-any.whl.

File metadata

File hashes

Hashes for termux_playwright-1.61.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5fa23ca1b702b5d34b5cb8366e02099bfa05e0c58e4762f0e933a6989db5a8a1
MD5 ad9bd21242f0940fabcf2a4a123bead3
BLAKE2b-256 46a65a66210f09012d0640357a0743c83da701edb2800152e4584bde32ce5d0f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page