inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

현존 최강 크롤링 기술: Scrapy와 Selenium 정복

[참고] 실전크롤링: xpath와 selenium 활용해서 페이스북 로그인하기

587

ses123you

작성한 질문수 7

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

 

웹-크롤링 selenium scrapy

답변 1

0

잔재미코딩 DaveLee

알려주셔서 감사합니다. 올해내로 시간이 조금 된다면, 결국 외부 사이트는 다 싹 제 개인 사이트를 크롤링하는 것으로 만들어야할 것 같습니다. 워낙 수시로 바뀌어서요. 심지어 정부 Open API 도 바뀌다보니 ㅎㅎ

button 의 id 가 사실 매번 해당 사이트를 오픈할 때, 각자의 PC나 IP등등에 따라 달라지는 것 같습니다. 궁리 끝에, name 속성은 변경되지 않으므로 다음과 같이 변경하였고, 관련 영상의 자료도 다음과 같이 코드에 설명을 붙여놓았습니다.

# 2021.02.28 수정 : (수업자료에도 반영해놓았습니다.)

# 웹사이트 변경으로, 영상에서 시연한 "//*[@id='u_0_b']" 등으로는 id 가 매번 변경되어, 선택이 되지 않습니다.

# 따라서 변경되지 않은 button 의 name 속성을 사용해서 "//*[@name='login']"  으로 변경합니다.

login_button = "//*[@name='login']"

감사합니다.!!!

코딩을 잘 따라 한 것 같은데 오류가 발생하는 것 같습니다

0

624

1

scrapy를 jupyter 환경에서 할 수 있나요

0

358

1

[실전 크롤링: scrapy 크롤링 팁] 질문있습니다.

0

311

1

[실전 크롤링: 지마켓 크롤링하며, scrapy 실전 활용법 익히기1] 5분50초쯤 질문

0

220

1

[강력/최신 크롤링 기술: Scrapy 로 지마켓 크롤링하기1] 관련 질문

0

277

1

xml을 parsing할때 <을 &lt; 로 인식합니다.

0

333

1

pipelines.py에서 process_item내에서 print문이 작동을 하지 않네요 ㅠ

0

291

3

PhantomJS 문의

0

292

1

selenium 문의

0

328

1

브라우저 제어해서 크롤링하기 - 처음강의 마지막부분 문의

0

3002

1

on error 해결 방법 질문

0

355

1

[팁] 윈도우 cmd 커맨드

0

346

1

[팁]Chrome User Agent 아는법

0

326

1

실전 크롤링: 브라우저를 제어해서 트위터 사이트 로그인 하기 질문

0

253

1

동영상 강의 만드실 때 사용한 툴을 알려주실 수 있을까요?

0

235

1

CSS Selector 에서 질문이 있습니다.

0

434

2

pip install scrapy 오류

0

481

1

셀레니움 실행불가

0

1576

1

실전 크롤링: XPATH와 Selenium 활용해서 페이스북 로그인 하기 에서 질문이 있습니다.

0

225

1

언제 get_text()를 사용하고 또 언제 .text를 사용하나요?

0

285

1

강의교안자료 받을수있을까요?

0

261

1

[강의 9:27관련 질문] price, title 열 위치

0

158

1

div에 있는 클래스가 2개이면 어떻게 하나요?

0

365

1

css 셀렉터에 대해 질문이 있습니다.

0

144

1