[playwright, python] 인스타그램 포스팅 자동화

bluejoy·2022년 12월 4일
0

파이썬 자동화

목록 보기
5/5

시작하기 전에

약관 위배이다. 적발되서 정지되어도 책임질 수 없다.

만든 이유

playwright도 연습해볼겸 제작해보았다. 인스타그램 자동 포스팅을 검색해보니 대부분 selenium이나 bs4로 제작되었고, 판매용이라 코드도 공개 안하는 것이 슬퍼서 만들었다.
특히 playwright를 Python으로 적은 예제가 없다시피해 부족한 실력이지만 올려봅니다.

코드

import os
import time
from playwright.sync_api import (Locator, Page,
                                 sync_playwright, Playwright)

# 현재 파일의 폴더 경로
PATH = os.path.dirname(os.path.realpath(__file__))
CONTENT = "쓰고 싶은 내용"
ID = "insta id"
PASSWORD = "insta pw"


def open_insta_login(page: Page):
    """인스타그램에 접속하여 로그인 하는 함수"""
    # https://playwright.dev/python/docs/pages
    page.goto("https://www.instagram.com/")
    # https://playwright.dev/python/docs/selectors
    id_input: Locator = page.locator("[name=username]")
    # https://playwright.dev/python/docs/locators#locate-by-placeholder
    pw_input: Locator = page.locator("[type=password]")
    login_button: Locator = page.locator("[type=submit]")
    id_input.fill(ID)
    pw_input.fill(PASSWORD)
    time.sleep(1)
    login_button.click()


def post(page: Page):
    """인스타그램에서 사진과 글을 업로드하는 함수
    headless 모드에서는 영문으로 열리기에 이렇게함
    만약 headless가 아니라면 바꿔줘야한다.
    """
    # https://playwright.dev/docs/selectors#pick-n-th-match-from-the-query-result
    # https://playwright.dev/python/docs/locators#filtering-locators
    # https://github.com/microsoft/playwright/issues/15059#issuecomment-1163989286

    # 새 포스트 작성 버튼을 찾는다.
    post_button: Locator = page.locator("[aria-label='New post']")
    post_button.click()
    # 이미지를 업로드한다. test.png 사진이 존재해야함.
    page.set_input_files('input[type="file"]', f"{PATH}/test.png")
    # 다음으로 넘어간다.
    next_button: Locator = page.locator("button:text('Next')")
    next_button.click()
    next_button: Locator = page.locator("button:text('Next')")
    next_button.click()
    # 글 내용을 작성한다.
    text_area: Locator = page.locator("[aria-label='Write a caption...']")
    text_area.fill(CONTENT)
    # 업로드한다.
    share_button: Locator = page.locator("button:text('Share')")
    share_button.click()
    time.sleep(10)


def run(playwright: Playwright):
    # headless는 화면을 보이게 실행하는 것
    # https://playwright.dev/python/docs/api/class-browsertype#browser-type-launch
    args = [
        "--disable-gpu",
    ]
    browser = playwright.chromium.launch(headless=True, args=args)
    page = browser.new_page()
    open_insta_login(page)
    post(page)
    print(datetime.datetime.today(), 'success')
    browser.close()


def main():
    with sync_playwright() as playwright:
        run(playwright=playwright)


main()

수정 사항

  • 2022/12/12 : textarea 찾기 변경
profile
개발자 지망생입니다.

0개의 댓글