steadily
482
2021-01-26 12:47:31
6
331

AWS EC2에 PyAutoGUI 에러가 발생합니다.


안녕하세요.  AWS EC2에서 PyAutoGUI를 import해서 chromedriver를 이용해 URL에 접근한 뒤 스크린샷을 찍는 파이썬 코드를 구현중에 있습니다. 헌데, PyAutoGUI가 제대로 import되지 않아서 해당 문제가 발생합니다. 구글링해보니 비슷한 오류를 겪으신 분들이 종종 있었는데, 마땅한 해결책이 보이지 않아서 여기에 질문을 남깁니다. AWS EC2에서 PyAutoGUI를 사용해보신 분들 해당 오류를 어떻게 해결하셨는지 알려주시면 감사하겠습니다.

제 파이썬 코드입니다.

+) 아 그리고, macOS에서는 스크린샷 파일이 자동으로 downloads 폴더에 저장되지만 EC2에서는 어디에 저장되는지 잘 몰라서 임의로 /home/ec2-user/ 경로로 지정을 했는데, 사진 저장되는 경로가 어딘지 아신다면 알려주시면 고맙겠습니다. 감사합니다!

#!/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8

from slacker import Slacker
from datetime import datetime
from urllib import request
from bs4 import BeautifulSoup
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter

# selenium
from selenium.webdriver.chrome.options import Options
from selenium import webdriver

# image
import time
import webbrowser
import pyautogui

token = 'xoxb-'

retries = Retry(connect=5, read=3, redirect=3)
http_session = requests.Session()
http_session.mount('https://<yourdomain>.slack.com',
                   HTTPAdapter(max_retries=retries))


def send_slack_message(msg):
    full_msg = msg
    slack = Slacker(token)
    slack.files.upload(
        '/home/ec2-user/screenshot.png', channels='#bots-playground'
    )
    slack.chat.post_message('#bots-playground', full_msg, as_user=True)


def run():
    target = request.urlopen("http://ncov.mohw.go.kr/")
    soup = BeautifulSoup(target, "html.parser")
    nums = []

    for item in soup.select("div.datalist"):
        for data in item.select("span.data"):
            data.string = data.string.replace(',', '')
            nums.append(int(data.string))

    send_slack_message(f"오늘 기록한 어제 코로나 확진자수는: {sum(nums)}명입니다.")


def runImage():
    wd = webdriver.Chrome('/usr/bin/chromedriver')
    url = 'http://ncov.mohw.go.kr/'
    time.sleep(3)
    wd.get(url)

    time.sleep(2)
    pyautogui.screenshot(
        '/home/ec2-user/screenshot.png', region=(60, 1630, 940, 480)
    )

    wd.quit()


if __name__ == "__main__":
    try:
        runImage()
        run()
    except Exception as e:
        send_slack_message(e)


0
  • 답변 6

  • allinux
    1k
    2021-01-26 13:23:16

    ec2에 linux 면 x server 가 없을 겁니다.

    x server 를 설치해야 할겁니다. 

    쉽게 아래와 같이 설치해보세요.

    sudo apt-get install --no-install-recommends ubuntu-desktop


  • steadily
    482
    2021-01-26 14:02:56

    allinux 선생님 제가 apt-get이 아니라 yum을 사용하고 있는데,

    sudo yum install --no-install-recommends ubuntu-desktop

    으로 하니까

    Command line error: no such option: --no-install-recommends

    라는 오류가 나옵니다.

  • allinux
    1k
    2021-01-26 23:22:42

    아래와 같기 해보세요. 

    sudo yum install -y epel-release
    sudo yum groupinstall -y "Xfce"
    


  • steadily
    482
    2021-01-27 12:15:56

    allinux 선생님 말씀하신 대로 epel-release와 Xfce를 설치했음에도 불구하고 같은 오류가 반복됩니다..

  • allinux
    1k
    2021-01-27 12:45:39

    재부팅까지 해보세요 

    x윈도우가 실행되어야 합니다.

    리눅스에서 display=:0.0 같은 의미를 알고 있어야 합니다.

    그리고 보통 리눅스는 x윈도우가 없는 경우가 많기에 selenium 같은 도구는 유용하지가 못합니다. 

  • steadily
    482
    2021-01-27 14:23:17
    넵 해보겠습니다 감사합니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.