플레이 wright-pythhon이 AWS Lambda나 Alpine Linux로 조작하면 좋을 것 같은데...?
12148 단어 Pythonplaywrighttech
다만, Django에 편입하거나 AWS Lambda 등 서버 없는 환경에서 활동하려면 힘들 수 있다.
왜냐하면, 이유는 두 가지가 있다.
그래서 Docker 컨테이너 준비부터...
AWS Lambda에서 Playwright를 시작하기 위해서는 아래 기사에서 언급한 바와 같이 준비 작업이 비교적 힘들다.
실제로 파이톤으로 구동할 수 있는 구조가 있어요.
Playwright는 서버/클라이언트 구조로 이전에 파이프(표준 입력/표준 출력)를 통신 경로로 하고 서버(Node.js 기반의 Playwright 드라이브)와 클라이언트(playwright-python에서 쓴 스크립트)가 일했다.
통신선이 웹소켓으로 바뀌면 어때요?
이런 느낌으로 서버는 어떤 PaaS에서 이동하고 클라이언트 부분만 Django 또는 AWS Lambda 방식으로 이동하면 된다.이 구조를 사용하면 브라우저 동작에 필요한 의존성 패키지 등이 필요하지 않으므로 Alpine Linux를 사용해도 됩니다.
Playwright 1.11에서 가져온 WebSocketTransport
※ _덧붙인 포장이라 앞으로 변할 가능성이 큽니다!!
전통적인 Pipe Transport 방식 외에 웹소켓 Transport도 추가했다.
이로써
sync_playwright()
에서 PipeTransport 제작 Connection 처리를 모방하여 `WebSocketTransport 제작 Connection 버전의sync를 제작하였다.playwright_리모트 () 같은 거 만들면 돼요.↑ 이걸 복사해서 이렇게 만든 느낌.
class SyncPlaywrightRemoteContextManager:
def __init__(self, ws_endpoint) -> None:
self._playwright: SyncPlaywright
self._ws_endpoint = ws_endpoint
def __enter__(self) -> SyncPlaywright:
loop: asyncio.AbstractEventLoop
own_loop = None
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
own_loop = loop
if loop.is_running():
raise Error(
"""It looks like you are using Playwright Sync API inside the asyncio loop.
Please use the Async API instead."""
)
def greenlet_main() -> None:
loop.run_until_complete(self._connection.run_as_sync())
if own_loop:
loop.run_until_complete(loop.shutdown_asyncgens())
loop.close()
dispatcher_fiber = greenlet(greenlet_main)
self._connection = Connection(
dispatcher_fiber,
create_remote_object,
WebSocketTransport(loop, self._ws_endpoint)
)
g_self = greenlet.getcurrent()
def callback_wrapper(playwright_impl: Playwright) -> None:
self._playwright = SyncPlaywright(playwright_impl)
g_self.switch()
self._connection.call_on_object_with_known_name(
"Playwright", callback_wrapper)
dispatcher_fiber.switch()
playwright = self._playwright
playwright.stop = self.__exit__ # type: ignore
return playwright
def start(self) -> SyncPlaywright:
return self.__enter__()
def __exit__(self, *args: Any) -> None:
self._connection.stop_sync()
def sync_playwright_remote(ws_endpoint) -> SyncPlaywrightRemoteContextManager:
return SyncPlaywrightRemoteContextManager(ws_endpoint)
다음main.py
with sync_playwright_remote('ws://127.0.0.1:8080/ws') as playwright:
playwright.chromium.launch() as browser:
page = browser.new_page()
page.goto('https://.....')
이런 느낌으로 Squraping clopt를 쓰면 WebSocket을 통해 wright 프로토콜 흐름을 재생하면 자동으로 작동할 수 있다.실제 Heroku에서 Playwright 서버를 이동하고 손 옆
python:3.9-alpine
의 Docker 이미지로 이동하는 샘플은 이 폐기물↓GiitHub 코드↓
Alpine Linux에 Playwright↓ 설치
총결산
Playwright 1.11 이후라면 패키지에 포함된 WebSocketTransport를 숨길 수 있습니다.
숨겨진 포장이라 언젠가는 망가질 수 있지만 1.12.3은 아직 망가지지 않았다.
Reference
이 문제에 관하여(플레이 wright-pythhon이 AWS Lambda나 Alpine Linux로 조작하면 좋을 것 같은데...?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yusukeiwaki/articles/75a63494ea894c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)