반응형

사용자 환경 : macOS Sierra 10.12.6Python 3.6.4PyCharm 2017.3.4 build PC-173.4674.37.






이 글을 읽기 전, 1편 포스팅을 숙지 하셔야 됩니다.





설치는 다 했으니 본격적으로 실행에 옮겨보자.





1. 우선 필요한 파이썬 라이브러리들을 임포트 한다.

from bs4 import BeautifulSoup
from selenium import webdriver




2. driver라는 이름의 변수에 webdriver 객체를 만들어 저장한다.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

저장경로 살피세요




3. Selenium은 기본적으로 웹 자원들이 모두 로드될 때까지 기다려주지만, 암묵적으로 기다리는 시간을 조정할 수 있다.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)




4. 이제 URL을 지정하여 접근하자.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)

# URL 접근
driver.get('https://nid.naver.com/nidlogin.login')




5. 네이버 로그인 화면에서 아이디와 패스워드의 값을 넘기는 폼의 name 값이 각각 id, pw인 것을 확인할 수 있다.





6. webdriver의 find_element_by_name() 함수를 통해 태그를 지정하여 값을 넣어주자.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)

# URL 접근
driver.get('https://nid.naver.com/nidlogin.login')

# ID, PW 입력
id = "본인_네이버_아이디"
pw = "본인_네이버_패스워드"
driver.find_element_by_name('id').send_keys(id)
driver.find_element_by_name('pw').send_keys(pw)




7. 이제 로그인 버튼을 눌러 로그인이 정상적으로 실행되는지 확인한다.

from bs4 import BeautifulSoup
from selenium import webdriver

# 위치 지정
driver = webdriver.Chrome("(~저장경로)/chromedriver")

# 웹 자원 로드를 위해 암묵적으로 딜레이
delay_time = 3
driver.implicitly_wait(delay_time)

# URL 접근
driver.get('https://nid.naver.com/nidlogin.login')

# ID, PW 입력
id = "본인_네이버_아이디"
pw = "본인_네이버_패스워드"
driver.find_element_by_name('id').send_keys(id)
driver.find_element_by_name('pw').send_keys(pw)

# 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()




8. 로그인 후 실시간 검색어 추출을 위해 네이버 메인으로 이동한다.

driver.get("https://www.naver.com")




9. BeautifulSoup 객체를 이용해 페이지를 분석한다.

driver.get("https://www.naver.com")

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')




10. 5번에서와 같이 개발자 도구를 통해 실시간 검색어가 어느 태그에 있는지 확인한다.




11. 마지막으로 추출된 값들을 프린트 한다.

driver.get("https://www.naver.com")

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

realtime_search_word = soup.select('div.ah_roll_area > ul.ah_l > li > a > span.ah_k')
for list in realtime_search_word:
    print(list.text.strip())






이로써 파이썬과 BeautifulSoup, Selenium, ChromeDriver 등과 같은 라이브러리를 사용하여 네이버에 로그인 후, 실시간 검색어를 추출하는 프로그램을 작성해보았다.












반응형
반응형

사용자 환경 : macOS Sierra 10.12.6Android Studio 3.0.1 {

  Build #AI-171.4443003, built on November 10, 2017

  JRE: 1.8.0_152-release-915-b08 x86_64

  JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

  }






현재 로그인 시스템이 구현되어 있는 대부분의 앱에는 자동 로그인 기능이 구현되어 있다.



자동 로그인 기능이 구현되어 있지 않은 앱을 사용해본 경험이 있다면 이 기능을 사용함으로써 앱이 많은 편리함을 가져다 준다는 것을 알 수 있다.



이 기능을 구현하기 위해 우리는 SharedPreference API를 사용할 것이다.



1. 가장 먼저 정보를 저장하기 위한 메소드를 내장한 클래스를 구현한다.

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class SaveSharedPreference {

    static final String PREF_USER_NAME = "username";

    static SharedPreferences getSharedPreferences(Context ctx) {
        return PreferenceManager.getDefaultSharedPreferences(ctx);
    }

    // 계정 정보 저장
    public static void setUserName(Context ctx, String userName) {
        SharedPreferences.Editor editor = getSharedPreferences(ctx).edit();
        editor.putString(PREF_USER_NAME, userName);
        editor.commit();
    }

    // 저장된 정보 가져오기
    public static String getUserName(Context ctx) {
        return getSharedPreferences(ctx).getString(PREF_USER_NAME, "");
    }

    // 로그아웃
    public static void clearUserName(Context ctx) {
        SharedPreferences.Editor editor = getSharedPreferences(ctx).edit();
        editor.clear();
        editor.commit();
    }
}

line 7. key 값에 해당된다.


line 9~11. 모든 액티비티에서 인스턴스를 얻기 위한 메소드이다.


line 14~18. 로그인 시 자동 로그인 여부에 따라 호출 될 메소드이다. userName이 저장된다.


line 21~23. 현재 저장된 정보를 가져오기 위한 메소드이다.


line 26~30. 자동 로그인 해제 및 로그아웃 시 호출 될 메소드이다.





2. 자동 로그인 여부를 체크할 인증용 액티비티 생성.

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class FirstAuthActivity extends AppCompatActivity {

    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first_auth);

        if(SaveSharedPreference.getUserName(FirstAuthActivity.this).length() == 0) {
            // call Login Activity
            intent = new Intent(FirstAuthActivity.this, LoginActivity.class);
            startActivity(intent);
            this.finish();
        } else {
            // Call Next Activity
            intent = new Intent(FirstAuthActivity.this, HomeActivity.class);
            intent.putExtra("STD_NUM", SaveSharedPreference.getUserName(this).toString());
            startActivity(intent);
            this.finish();
        }
    }
}

line 15~20. SharedPreference에 저장되어 있는 정보의 길이가 0일 경우, 즉 없을 경우 로그인 액티비트를 호출한다.


line 20~26. 나머지 경우, 즉 저장되어 있는 정보가 있을 경우 바로 로그인 다음 액티비티를 호출한다.





3. 자동 로그인 설정 시 사용할 코드

SaveSharedPreference.setUserName(LoginActivity.this, editId.getText().toString());

로그인 액티비티에서 자동 로그인 설정과 함께 로그인 시 EditText의 값을 SaveSharedPrefernce.setUserName(Context, String) 메소드를 통해 저장.

반응형

+ Recent posts