인프런 커뮤니티 질문&답변

윤태영님의 프로필 이미지
윤태영

작성한 질문수

남박사의 파이썬 기초부터 실전 100% 활용

안녕하세요? 막막한 문제에 직면해서 질문드립니다

작성

·

2K

1

"ResizeObserver loop limit exceeded"라는 에러떄문에 어제부터 골머리를 앓고있습니다 ㅠ

인스타그램에 로그인한뒤 좋아요와 댓글을다는 프로그램인데요,

로그인까지는 무리없이 되는데 상대방의 인스타그램 피드에 들어가고 좋아요를 누르는 와중에

터미널창에 "ResizeObserver loop limit exceeded"가 뜨며 실행창이 응답없음이 뜹니다

구글링해보니 크롬이 가지고있는 문제라고 하는데 해결법을  알수가 없습니다 ㅠㅠ

본인의 인스타 아이디 비번을 입력해 로그인한뒤

새로운 창이 열리고 상대의 아이디를 입력하여 '좋아요'를 클릭하면

상대의 페이지로 들어간뒤 첫 게시글을 클릭하여 좋아요와 댓글을다는 순서입니다. 코드입니다.

from selenium import webdriver
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtWidgets import QToolButton, QSizePolicy, QLabel, QLineEdit,QPushButton
import random
import keyboard
import re
options=webdriver.ChromeOptions()
options.add_argument('headless')#창을 안띄우는 headless모드
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")#gpu가속 끔
#user-agent값을 변경하여 headless모드 감지를 방지
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
options.add_argument("lang=ko_KR"#headless모드에선 언어설정이 안되있으므로 한국어로 설정(감지 방지)
driver = webdriver.Chrome('C:\\Users\\User\\Downloads\\chromedriver_win32\\chromedriver.exe',chrome_options=options)
class start(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.layout=QtWidgets.QHBoxLayout(self)

        self.id_layout = QtWidgets.QVBoxLayout(self)
        self.pwd_layout = QtWidgets.QVBoxLayout(self#QV=가로 QH=세로

        self.id=QLabel("ID")
        self._id=QLineEdit()
        self.pwd=QLabel("password")
        self._pwd=QLineEdit()

        self.id_layout.addWidget(self.id)
        self.id_layout.addWidget(self._id)

        self.pwd_layout.addWidget(self.pwd)
        self.pwd_layout.addWidget(self._pwd)
        self.layout.addLayout(self.id_layout)
        self.layout.addLayout(self.pwd_layout)

        self.setLayout(self.layout)

        self._pwd.setEchoMode(QLineEdit.Password)
        self._pwd.returnPressed.connect(self.login)

        self.show()
    def login(self):
        driver.get("https://www.instagram.com/accounts/login/")
        driver.implicitly_wait(10)

        driver.find_element_by_name('username').send_keys(self._id.text())
        driver.find_element_by_name('password').send_keys(self._pwd.text())
        driver.implicitly_wait(10)
        driver.find_elements_by_tag_name('button')[1].click()
        driver.implicitly_wait(100)
        self.newWindow = Main()
        self.newWindow.show()
        self.close()
        
class Main(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.layout_m = QtWidgets.QHBoxLayout(self#전체틀
        self.start_layout = QtWidgets.QVBoxLayout() #버튼을 담을 틀
        self.setFixedSize(300200)
        self.target=QLabel("상대의 아이디를 입력하세요")
        self._target=QLineEdit()
        self._target.returnPressed.connect(self.targetID)
        self.like = self.createButton("좋아요",self.clicklike)
        self.like.resize(self.like.sizeHint())
        self.start_layout.addWidget(self.target)
        self.start_layout.addWidget(self._target)
        self.layout_m.addLayout(self.start_layout)#전체틀에 버튼을 담은 틀을 담음
        self.layout_m.addWidget(self.like)
        self.setLayout(self.layout_m)

       
        self.show()

    def createButton(selftextfunction):
        button = Button(text)
        button.clicked.connect(function)
        return button
   
    def targetID(self):    
        self.target_name=self._target.text()
        driver.get('https://www.instagram.com/{}'.format(self.target_name))
    

    def clicklike(self):
           #첫번째 게시글 클릭
        driver.find_elements_by_css_selector('.v1Nh3.kIKUG._bz0w')[0].find_element_by_tag_name('a').click()
        driver.implicitly_wait(10)

        #좋아요누르기
        driver.get(driver.current_url)
        temp1=driver.find_elements_by_class_name('eo2As ')
        temp1[0].find_element_by_class_name('wpO6b ').click()

        #사진의 정보가져와서 필요한데이터 추출
        img_information=driver.find_elements_by_tag_name('img')[1].get_attribute('alt')
        img_information=img_information.split(': ')
        img_information=img_information[1].split(' and ')
       

        food = ["맛있겠네","맛있어 보이는구나!","다음에 나도 데려가~~""돼지야!"]
        people=["오 아주 잘나왔군!""정말 멋쟁이군""우도환 닮았다""손나은 닮았다"]

        for i in img_information:
            if re.search('people',i):
                case="인물"
                break
            if re.search('food',i):
                case="음식"
                break
            else:
                case="기타"

        if case=="인물":
            rand_number=random.randint(0,3)
            comment=people[rand_number]
        elif case=="음식":
            rand_number=random.randint(0,3)
            comment=food[rand_number]
        else:
            comment="^^7"

        #댓글입력
        temp1[0].find_elements_by_class_name('wpO6b ')[1].click()
        driver.find_element_by_tag_name('textarea').send_keys(comment)
        driver.implicitly_wait(10)
        driver.find_element_by_class_name('X7cDz').find_element_by_tag_name('button').click()
#계산기만들기의 코드 가져옴
class Button(QToolButton):
    def __init__(selftext):
        super().__init__()
        buttonStyle = '''
        QToolButton:hover {border:1px solid #0078d7; background-color:#e5f1fb;}
        QToolButton:pressed {background-color:#a7c8e3}
        QToolButton {font-size:11pt; font-family:나눔고딕; border:1px solid #d6d7d8; background-color:#f0f1f1}
        '''
        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        self.setText(text)
        self.setStyleSheet(buttonStyle)

    def sizeHint(self):
        size = super(Button, self).sizeHint()
        size.setHeight(size.height() + 30)
        size.setWidth(max(size.width(), size.height()))
        return size

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    win=start()
   app.exec_()

답변 2

2

남박사님의 프로필 이미지
남박사
지식공유자

제가 인스타그램을 하지 않고 아이디가 없어서 확인을 해볼수는 없었습니다만..

저도 구글링을 해보니 대체적으로 위의 오류코드는 애니메이션 프레임(이게 뭘 의미하는지는 명확하게 알 수 없었습니다) 내에서 측정값을 전달하지 못해서 생기는 오류로 그리 신경쓸 오류는 아닌듯 보입니다만 이게 pyqt 환경에서는 문제가 되는건지 확인해보지 못했습니다. 일단 크롬에서만의 문제인지 부터 확인해보려면 현재 셀레니움을 파이어폭스 드라이버로 교체해서 테스트 해보시기 바랍니다. 파이어폭스에서 문제가 없다면 크롬에 확장 플러그인들의 문제인지도 확인해보셔야 할테고....

정확히 코드 몇 라인에서 해당 문제가 발생하는지 순차적으로 디버깅 해보셔야 할듯 합니다. vs code의 디버깅 기능을 활용해도 되고 의심가는 라인마다 print 문찍어서 확인해보는 방법도 있습니다. 어쨌든 정확히 어떤 구문에서 문제가 발생하는지를 좀 더 명확히 할 필요는 있습니다. 그래야 해당 오류로 인해 pyqt 가 프리징이 되는건지 아니면 코드 상의 문제인지 정확히 알 수 있을거라 생각됩니다.

그래도 해결되지 않으면 다시 질문 주시기 바랍니다.

0

도움 될진 모르겠지만

전 App.js에서 useEffect로 받아와서 디스플레이를 꺼버렸습니다.

 

windows.addEventListener('error', e=>{

if(e.mesaage === 'ResizeObserver ....exceeded'){

const aDiv = document.gerElementById('webpack-dev-server-client-overlay-div');

const a = document.gerElementById('webpack-dev-server-client-overlay');

if(aDiv)aDiv.setAttribute('style','display: none');

if(a)a.setAttribute('style','display: none');

}

})

윤태영님의 프로필 이미지
윤태영

작성한 질문수

질문하기