-
카테고리
-
세부 분야
데이터 엔지니어링
-
해결 여부
미해결
[참고] 실전크롤링: xpath와 selenium 활용해서 페이스북 로그인하기
21.02.27 09:15 작성 조회수 363
0
강의 제목 - 실전크롤링: xpath와 selenium 활용해서 페이스북 로그인하기
강의 동영상 6:46 에서
1. xpath 선택자 부분이 바뀌었습니다.
기존코드
login_button = "//*[@id=''u_0_d]"
바뀐코드
login_btn = "//*[@id='u_0_d_1n']"
2. 기존 동영상 강의 코드 그대로 하면 크롤링이 안됩니다.
문제가 되는 부분 ------------
email_id = "//*[@id='email']"
password_id = "//*[@id='pass']"
login_button = "//*[@id='u_0_d_1n']"
email_tag = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH, email_id)))
password_tag = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,password_id)))
login_button_tag = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,login_button)))
xpath와 WebDriverWait 부분이 문제가 되는 것 같습니다.
바꾼 전체 소스 코드 -------------
다음과 같이 바꾸니 크롤링이 되었습니다.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
time.sleep(2)
driver.get('https://www.facebook.com')
time.sleep(5)
my_id = '7005425@gmail.com'
my_pwd = '칠공공5425'
email = driver.find_element_by_id('email')
password = driver.find_element_by_id('pass')
login_btn = driver.find_element_by_name('login')
email.clear()
email.send_keys(my_id)
time.sleep(2)
password.clear()
password.send_keys(my_pwd)
time.sleep(2)
login_btn.click()
답변을 작성해보세요.
0
잔재미코딩 DaveLee
지식공유자2021.02.28
알려주셔서 감사합니다. 올해내로 시간이 조금 된다면, 결국 외부 사이트는 다 싹 제 개인 사이트를 크롤링하는 것으로 만들어야할 것 같습니다. 워낙 수시로 바뀌어서요. 심지어 정부 Open API 도 바뀌다보니 ㅎㅎ
button 의 id 가 사실 매번 해당 사이트를 오픈할 때, 각자의 PC나 IP등등에 따라 달라지는 것 같습니다. 궁리 끝에, name 속성은 변경되지 않으므로 다음과 같이 변경하였고, 관련 영상의 자료도 다음과 같이 코드에 설명을 붙여놓았습니다.
# 2021.02.28 수정 : (수업자료에도 반영해놓았습니다.)
# 웹사이트 변경으로, 영상에서 시연한 "//*[@id='u_0_b']" 등으로는 id 가 매번 변경되어, 선택이 되지 않습니다.
# 따라서 변경되지 않은 button 의 name 속성을 사용해서 "//*[@name='login']" 으로 변경합니다.
login_button = "//*[@name='login']"
감사합니다.!!!
답변 1