inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

2162

윤태영

작성한 질문수 22

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_()

웹-크롤링 python

답변 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');

}

})

한글 변수의 한글 상태를 만드는 법?

0

36

0

38강 = 연산자 더하고 빼기

0

64

2

주석처리

0

120

1

함수의 파라미터값 msg

0

157

1

강의자료 이미지 안나옴

0

241

3

강의자료 질문 두번째

0

165

3

강의자료 관련 질문

0

117

1

파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.

0

241

1

소수 너무 어려워요

0

247

1

imagefont 함수 사용

0

240

1

pylint

0

360

1

add 함수 문의 ㅠㅠ

0

288

1

형식 문의드립니다.

0

213

1

변수 명을 왜 src, tar로 하셨는지 궁금합니다.

0

610

1

숫자야구 코드를 짜 봤는데 뭔가 이상합니다.

0

254

1

zsh: command not found: pylint

0

272

1

텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ

0

548

1

질문드립니다.

1

379

2

list.reverse() 출력에 대해서 질문있습니다.

1

437

1

데코레이터 함수 및 동작시간 질문입니다.~

1

329

2

opencv 사용하면서 궁금한점 (해상도)

1

785

1

질문드립니다.

1

303

1

아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?

1

448

1

크롤링안되는 현상 문의 드립니다.

1

426

1