-
카테고리
-
세부 분야
업무 자동화
-
해결 여부
미해결
로그인 이후 발이 묶여서 멈추고 더이상 넘어가지 못하고 있습니다.
23.05.14 08:36 작성 조회수 638
1
안녕하세요 : )
강의 넘 잘 듣고 있습니다.
몇일째 넘어가지 못하고 있어 이렇게 글을 남김니다.
로그인 후 환경이 변경된것 같은데
로그인 정보를 저장하시겠어요? 부분은driver.find_element(By.CLASS_NAME, '_acan').click()
이걸로 하니 넘어간 것 같은데
2번째 뜨는 알림 설정 창은
나중에 하기 버튼 클릭을 누르려고 아무리 애를 써도 안되네요 ㅠ
driver.find_element(By.CLASS_NAME, '_a9--._a9_1').click()
class="_a9-- _a9_1"
개발자도구 > Ctrl + F
_a9-- _a9_1 이렇게 검색하면 1개를 찾는데
_a9--._a9_1 중간에 빈영역에 .을 넣으면 찾지 못하는 문제가 있네요?
왜일까요?
XPATH, SELECTOR 등을 모두 활용해 봤는데 더 이상 진행이 되지 않습니다.
어떻게 하면 될까요?
답변을 작성해보세요.
1
![jangtaesan님의 프로필](https://cdn.inflearn.com/public/main/profile/default_profile.png?w=48)
jangtaesan
질문자2023.05.18
답변 감사드립니다.
로그인이 완료되고 난 후
처음에 로그인 정보를 저장하는 창이 뜨는데
이 부분은 넘겼다고 생각했는데 오늘 해보니 안되네요.
설명해주신 multi class를 나름 해결한다고 시도를 여럿 해 보았는데 마찬가지 였습니다.
혹시 제가 시도를 안해본 부분이 뭘까요?
# 로그인 정보를 저장하시겠어요? 정보 저장 클릭
# 에러 1>
# Copy selector : #mount_0_0_sU > div > div > div.x9f619.x1n2onr6.x1ja2u2z > div > div > div > div.x78zum5.xdt5ytf.x10cihs4.x1t2pt76.x1n2onr6.x1ja2u2z > div.x9f619.xnz67gz.x78zum5.x168nmei.x13lgxp2.x5pf9jr.xo71vjh.x1uhb9sk.x1plvlek.xryxfnj.x1c4vz4f.x2lah0s.x1q0g3np.xqjyukv.x1qjc9v5.x1oa3qoh.x1qughib > div.xh8yej3.x1gryazu.x10o80wk.x14k21rp.x1porb0y.x17snn68.x6osk4m > section > main > div > div > div > section > div > button
# driver.find_element(By.CSS_SELECTOR, '#mount_0_0_sU > div > div > div.x9f619.x1n2onr6.x1ja2u2z > div > div > div > div.x78zum5.xdt5ytf.x10cihs4.x1t2pt76.x1n2onr6.x1ja2u2z > div.x9f619.xnz67gz.x78zum5.x168nmei.x13lgxp2.x5pf9jr.xo71vjh.x1uhb9sk.x1plvlek.xryxfnj.x1c4vz4f.x2lah0s.x1q0g3np.xqjyukv.x1qjc9v5.x1oa3qoh.x1qughib > div.xh8yej3.x1gryazu.x10o80wk.x14k21rp.x1porb0y.x17snn68.x6osk4m > section > main > div > div > div > section > div > button').click()
# 에러 2>
# XPath : //*[@id="mount_0_0_sU"]/div/div/div[2]/div/div/div/div[1]/div[1]/div[2]/section/main/div/div/div/section/div/button
# driver.find_element(By.XPATH, '//*[@id="mount_0_0_sU"]/div/div/div[2]/div/div/div/div[1]/div[1]/div[2]/section/main/div/div/div/section/div/button').click()
# class="_acan _acap _acas _aj1-"
'''
개발자도구 > Ctrl + F 검색 확인
_acan _acap _acas _aj1- → 1 of 1
._acan._acap._acas._aj1- → 1 of 1
._acan → 1 of 1
button._acan._acap._acas._aj1- → 1 of 1
button._acan → 1 of 1
'''
# 에러 3>
# driver.find_element(By.CLASS_NAME, 'button._acan._acap._acas._aj1-').click()
# 에러 4>
# driver.find_element(By.CLASS_NAME, '._acan._acap._acas._aj1-').click()
# 에러 5>
# driver.find_element(By.CLASS_NAME, '._acan').click()
# 에러 6>
# driver.find_element(By.CLASS_NAME, 'button._acan').click()
# 에러는 안나지만 넘어가지 않음
# driver.find_element(By.CLASS_NAME, '_acan').click()
# 에러는 안나지만 넘어가지 않음
# btn_later1 = driver.find_element(By.CLASS_NAME, '_acan')
# btn_later1.click()
# 에러는 안나지만 넘어가지 않음
btn_later1 = driver.find_element(By.CLASS_NAME, '_acan')
btn_later1.send_keys(Keys.ENTER)
나중에 하기 클릭은 불가능한지도 확인 부탁드립니다.
이거 하다가 강의 기간 한달이 넘어갈 것 같은 예감이 ㅠㅠ
에러 발생 내용입니다. 혹시나해서...
DevTools listening on ws://127.0.0.1:64499/devtools/browser/3134b8eb-237d-40f7-8c32-7b4f535b308e
Traceback (most recent call last):
File "Q:\Project\Lecture\insta_auto\8.insta_web.py", line 68, in <module>
driver.find_element(By.CLASS_NAME, 'button._acan._acap._acas._aj1-').click()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_element
return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".button._acan._acap._acas._aj1-"}
(Session info: chrome=113.0.5672.94)
Stacktrace:
Backtrace:
GetHandleVerifier [0x00986DF3+48691]
(No symbol) [0x00918CC1]
(No symbol) [0x00825068]
(No symbol) [0x00850477]
(No symbol) [0x008506AB]
(No symbol) [0x0087DD62]
(No symbol) [0x0086A314]
(No symbol) [0x0087C452]
(No symbol) [0x0086A0C6]
(No symbol) [0x00847E18]
(No symbol) [0x00848F3D]
GetHandleVerifier [0x00BE4EAA+2531050]
GetHandleVerifier [0x00C24B60+2792352]
GetHandleVerifier [0x00C1E6EC+2766636]
GetHandleVerifier [0x00A10820+612448]
(No symbol) [0x009225BC]
(No symbol) [0x0091E808]
(No symbol) [0x0091E8EB]
(No symbol) [0x00911C77]
BaseThreadInitThunk [0x75C6FA29+25]
RtlGetAppContainerNamedObjectPath [0x77BD7A7E+286]
RtlGetAppContainerNamedObjectPath [0x77BD7A4E+238]
김지유
지식공유자2023.05.18
driver.find_element(By.CLASS_NAME, 'button._acan._acap._acas._aj1-').click()
이 부분을 아래 코드로 변경해보시지요 !
driver.find_element(By.CSS_SELECTOR, 'button._acan._acap._acas._aj1-').click()
![jangtaesan님의 프로필](https://cdn.inflearn.com/public/main/profile/default_profile.png?w=48)
jangtaesan
질문자2023.05.19
답변 감사드립니다.
다른 문제가 있는지 결과가 같네요 ㅠ
전체 코드 올려드려볼께요. 혹시 잘못된게 있는지만 짚어주심 감사하겠습니다.
로그인 과정까지는 문제 없이 잘 진행 되었습니다.
import time, data
import chromedriver_autoinstaller
chromedriver_autoinstaller.install()
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get("https://www.instagram.com/")
# 인스타그램 로그인 시작
id_selector = "#loginForm > div > div:nth-child(1) > div > label > input"
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, id_selector)))
id_input = driver.find_element(By.CSS_SELECTOR, id_selector)
id_input.send_keys(data.id)
time.sleep(0.5)
pw_selector = "#loginForm > div > div:nth-child(2) > div > label > input"
pw_input = driver.find_element(By.CSS_SELECTOR, pw_selector)
pw_input.send_keys(data.pw)
time.sleep(0.5)
login_btn_selector ="#loginForm > div > div:nth-child(3) > button"
login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector)
login_btn.click()
# 인스타그램 로그인 종료
time.sleep(1)
# 로그인 정보를 저장하시겠어요? 정보 저장 클릭
driver.find_element(By.CSS_SELECTOR, 'button._acan._acap._acas._aj1-').click()
time.sleep(1)
# 알림 설정 ("나중에 하기 버튼 클릭")
driver.find_element(By.CLASS_NAME, 'div._a9--._a9_1').click()
input()
에러는 역시나 같은 부분에서 납니다. 혹시 저만의 문제일까요?
DevTools listening on ws://127.0.0.1:54628/devtools/browser/9908ddf3-95b0-4a33-8a40-4fae375734ed
Traceback (most recent call last):
File "Q:\Project\Lecture\insta_auto\insta_web_login.py", line 40, in <module>
driver.find_element(By.CSS_SELECTOR, 'button._acan._acap._acas._aj1-').click()
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\webelement.py", line 94, in click
self._execute(Command.CLICK_ELEMENT)
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\webelement.py", line 403, in _execute
return self._parent.execute(command, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "Q:\Project\Lecture\insta_auto\venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button class="_acan acap acas acax aj1-" type="submit" disabled="">...</button> is not clickable at point (662, 310). Other element would receive the click: <div class="x9f619 xjbqb8w x78zum5 x168nmei x13lgxp2 x5pf9jr xo71vjh x1xmf6yo x1e56ztr x540dpk x1m39q7l x1n2onr6 x1plvlek xryxfnj x1c4vz4f x2lah0s xdt5ytf xqjyukv x1qjc9v5 x1oa3qoh x1nhvcw1">...</div>
(Session info: chrome=113.0.5672.94)
1
김지유
지식공유자2023.05.17
multi class를 찾는 방법은 Tag Name.ClassName1.ClassName2 형태로 사용하는 방법입니다 !
driver.find_element(By.CLASS_NAME, 'div._a9--._a9_1').click() # 이런 식으로 사용하시면 됩니다
By.cssSelector("button.btn.btn-xs.btn-custom")
참고 링크 : https://stackoverflow.com/questions/51204668/how-to-find-element-that-has-multiple-class-in-selenium
0
답변 3