로그인
-
GUI를 구성하여 파이썬으로 네이버 자동 로그인 만들기2018.08.23
-
파이썬에서 selenium으로 네이버 로그인 자동화하기2018.08.08
-
xbox 0x8015dc0c 로그인 불가 해결하기2016.07.11
Android 로그인 아이디 암호 저장하기 [SharedPreferences 사용]
SharedPreferences 사용법은 이분의 블로그를 보고 참고하였음
https://re-build.tistory.com/37
앱을 쓰면 자주 보이는 로그인 정보 저장 기능을 구현한다.
UI 는 다음과 같다
구현 목표는
- 아이디와 암호를 체크박스 옵션으로 저장 유무를 결정한다.
- 아이디와 암호를 따로 구분하지 않고 같이 저장함
- 로그인시 아이디와 암호 둘 중 하나가 입력되지 않으면 "아이디/암호를 입력해주세요" 토스트메시지를 띄운다
- 아이디/암호 입력 후 로그인 정보 기억하기 체크만 해도 정보가 저장된다.
- 로그인 정보 기억하기를 체크하면 저장되고 해제하면 정보를 삭제한다
이런 동작을 하도록 구현
위 블로그를 참고하여 PreferenceManager를 만들어주고 MainActivity 이렇게 2개의 파일만 준비되어있으면 된다.
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="로그인"
android:id="@+id/parse"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="QR Scan"
android:id="@+id/scanQR"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="자산목록"
android:id="@+id/dbList"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/et_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:hint="사번" />
<EditText
android:id="@+id/et_pw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
android:hint="암호"/>
<CheckBox
android:id="@+id/cb_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="로그인 정보 기억하기" />
</LinearLayout>
</RelativeLayout>
자세한 설명은 주석 참고
MainActivity.java
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Button parsingBtn;
private Button scanQRBtn;
private Button ListBtn;
private EditText et_id;
private EditText et_pw;
private CheckBox cb_save;
String id,pw;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this; // 이거 필수!
parsingBtn = (Button) findViewById(R.id.parse);
scanQRBtn = (Button) findViewById(R.id.scanQR);
ListBtn = (Button) findViewById(R.id.dbList);
et_id = (EditText) findViewById(R.id.et_id);
et_pw = (EditText) findViewById(R.id.et_pw);
cb_save = (CheckBox) findViewById(R.id.cb_save);
boolean boo = PreferenceManager.getBoolean(mContext,"check"); //로그인 정보 기억하기 체크 유무 확인
if(boo){ // 체크가 되어있다면 아래 코드를 수행
//저장된 아이디와 암호를 가져와 셋팅한다.
et_id.setText(PreferenceManager.getString(mContext, "id"));
et_pw.setText(PreferenceManager.getString(mContext, "pw"));
cb_save.setChecked(true); //체크박스는 여전히 체크 표시 하도록 셋팅
}
parsingBtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){ //로그인 버튼 눌렀을 때 동작
//아이디 암호 입력창에서 텍스트를 가져와 PreferenceManager에 저장함
PreferenceManager.setString(mContext, "id", et_id.getText().toString()); //id라는 키값으로 저장
PreferenceManager.setString(mContext, "pw", et_pw.getText().toString()); //pw라는 키값으로 저장
Intent intent = new Intent(MainActivity.this, Parsing.class); //이건 없어도 무방
// 저장한 키 값으로 저장된 아이디와 암호를 불러와 String 값에 저장
String checkId = PreferenceManager.getString(mContext, "id");
String checkPw = PreferenceManager.getString(mContext, "pw");
//아이디와 암호가 비어있는 경우를 체크
if (TextUtils.isEmpty(checkId) || TextUtils.isEmpty(checkPw)){
//아이디나 암호 둘 중 하나가 비어있으면 토스트메시지를 띄운다
Toast.makeText(MainActivity.this, "아이디/암호를 입력해주세요",
Toast.LENGTH_SHORT).show();
}else { //둘 다 충족하면 다음 동작을 구현해놓음
intent.putExtra("id",checkId);
intent.putExtra("pw",checkPw);
startActivity(intent);
}
}
});
//로그인 기억하기 체크박스 유무에 따른 동작 구현
cb_save.setOnClickListener(new CheckBox.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()) { // 체크박스 체크 되어 있으면
//editText에서 아이디와 암호 가져와 PreferenceManager에 저장한다.
PreferenceManager.setString(mContext, "id", et_id.getText().toString()); //id 키값으로 저장
PreferenceManager.setString(mContext, "pw", et_pw.getText().toString()); //pw 키값으로 저장
PreferenceManager.setBoolean(mContext, "check", cb_save.isChecked()); //현재 체크박스 상태 값 저장
} else { //체크박스가 해제되어있으면
PreferenceManager.setBoolean(mContext, "check", cb_save.isChecked()); //현재 체크박스 상태 값 저장
PreferenceManager.clear(mContext); //로그인 정보를 모두 날림
}
}
}) ;
scanQRBtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(MainActivity.this, ScanQR.class);
startActivity(intent);
}
});
ListBtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
// Intent intent = new Intent(MainActivity.this, DBHelper.class);
// startActivity(intent);
}
});
}
}
동작 별 코드를 설명하자면
1. 아이디와 암호를 입력 후 로그인 기억하기를 체크했을 때
이 코드가 동작하게 되어 PreferenceManager에 아이디와 암호가 각각 "id","pw"라는 키값으로 저장된다. 사용할 때는 getString에서 이 키값으로 불러와 사용하면 된다.
2. 로그인 기억하기가 체크된 상태로 앱을 종료하고 다시 실행했을 때
boolean boo = PreferenceManager.getBoolean(mContext,"check"); //로그인 정보 기억하기 체크 유무 확인
if(boo){ // 체크가 되어있다면 아래 코드를 수행
//저장된 아이디와 암호를 가져와 셋팅한다.
et_id.setText(PreferenceManager.getString(mContext, "id"));
et_pw.setText(PreferenceManager.getString(mContext, "pw"));
cb_save.setChecked(true); //체크박스는 여전히 체크 표시 하도록 셋팅
}
위 코드에서 로그인 정보 기억하기 체크 유무를 확인한다. 체크가 된 상태로 종료했기 때문에 boo는 true 가 나올 테고 저장되어 있던 "id","pw"키 값을 불러와 아이디,암호 입력창에 셋팅해놓는다.
3. 로그인 기억하기 체크를 해제했을 때
위 코드가 동작하여 현재 체크 해제 상태이므로 false를 PreferencerManager에 상태 값을 저장하고 저장된 로그인 정보를 clear 코드로 모두 날린다. 그럼 앱을 종료하고 다시 실행했을 때 입력창에 아무것도 입력되어있지 않는 상태로 나타난다.
구현 방법은 사용자마다 다르고 더 깔끔하고 단순하게 작성할 수도 있지만 동작만 된다면 끝. 더 건드렸다가 다시 미궁 속으로 빠지긴 싫다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
Qt designer 로그인 GUI 에서 암호 입력시 암호 가리기
https://yonoo88.tistory.com/1210
위 링크에서 만들었던 로그인 창은 암호 입력시 암호가 가려지지 않는다.
암호를 가리기 위해서는 다음 코드가 필요하다.
self.lineEdit_PW.setEchoMode(QtWidgets.QLineEdit.Password)
이 코드를 암호 입력 코드에 추가해준다.
아니면 코드를 추가하지 않고 Qt designer 에서 GUI 를 구성할 때 속성을 변경해주면 자동으로 코드가 추가되어 있다.
echoMode를 password로 변경해주면 다음과 같이 암호가 가려진다.
'지식메모 > Python' 카테고리의 다른 글
GUI를 구성하여 파이썬으로 네이버 자동 로그인 만들기 (0) | 2018.08.23 |
---|---|
Qt designer로 생성한 .ui 파일 파이썬 .py로 변환 (0) | 2018.08.17 |
python 3.7.0 에서 pyside2를 설치하여 Qt Designer 설치하기 (2) | 2018.08.14 |
파이썬에서 selenium으로 네이버 로그인 자동화하기 (0) | 2018.08.08 |
파이썬과 자바 selenium 사용법 간단한 기능 비교 및 xpath 사용법 (0) | 2018.08.08 |
GUI를 구성하여 파이썬으로 네이버 자동 로그인 만들기
GUI 구성하기
Qt designer로 생성한 .ui 파일 파이썬 .py로 변환
http://yonoo88.tistory.com/1209
GUI 구성상태
기능 : ID와 PW 입력 후 시작버튼을 누름 > 동작 완료 후 listWidget에 로그인 성공 표시
아래 코드를 보면 UI 객체 명 별로 코드가 구성되어 있다
핵심은 시작 버튼에 이벤트 처리를 해주는 것. 시작 버튼 객체명은 startButton 이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | from PyQt5 import QtCore, QtGui, QtWidgets from selenium import webdriver import time class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(180, 234) self.listWidget = QtWidgets.QListWidget(Dialog) self.listWidget.setGeometry(QtCore.QRect(20, 160, 141, 61)) self.listWidget.setObjectName("textBrowser") self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(80, 10, 16, 16)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setGeometry(QtCore.QRect(80, 70, 21, 16)) self.label_2.setObjectName("label_2") self.startButton = QtWidgets.QPushButton(Dialog) self.startButton.setGeometry(QtCore.QRect(50, 130, 75, 23)) self.startButton.setObjectName("startButton") self.lineEdit_ID = QtWidgets.QLineEdit(Dialog) self.lineEdit_ID.setGeometry(QtCore.QRect(30, 30, 113, 20)) self.lineEdit_ID.setObjectName("lineEdit_ID") self.lineEdit_PW = QtWidgets.QLineEdit(Dialog) self.lineEdit_PW.setGeometry(QtCore.QRect(30, 90, 113, 20)) self.lineEdit_PW.setObjectName("lineEdit_PW") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) #startButton 클릭시 autoExcute 함수 수행 self.startButton.clicked.connect(self.autoExcute) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Naver Login")) self.label.setText(_translate("Dialog", "ID")) self.label_2.setText(_translate("Dialog", "PW")) self.startButton.setText(_translate("Dialog", "시작")) #셀레니움 동작 코드 함수 autoExcute 생성 def autoExcute(self): driver = webdriver.Chrome('C://chromedriver.exe') driver.implicitly_wait(3) driver.get('http://www.naver.com') driver.maximize_window() id = self.lineEdit_ID.text() pw = self.lineEdit_PW.text() driver.find_element_by_class_name('lg_local_btn').click() driver.find_element_by_id('id').send_keys(id) driver.find_element_by_id('pw').send_keys(pw) driver.find_element_by_class_name('btn_global').click() time.sleep(3) driver.close() #listWidget에 로그인 성공 표시 self.listWidget.addItem('로그인 성공') # self.addItem() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_()) |
코드를 실행시킨 후 아이디와 암호 입력 > 시작을 누르면 로그인 자동화가 진행되고 끝나면 로그인 성공 텍스트가 나타난다
'지식메모 > Python' 카테고리의 다른 글
Qt designer 로그인 GUI 에서 암호 입력시 암호 가리기 (2) | 2018.10.22 |
---|---|
Qt designer로 생성한 .ui 파일 파이썬 .py로 변환 (0) | 2018.08.17 |
python 3.7.0 에서 pyside2를 설치하여 Qt Designer 설치하기 (2) | 2018.08.14 |
파이썬에서 selenium으로 네이버 로그인 자동화하기 (0) | 2018.08.08 |
파이썬과 자바 selenium 사용법 간단한 기능 비교 및 xpath 사용법 (0) | 2018.08.08 |
파이썬에서 selenium으로 네이버 로그인 자동화하기
사전 작업은 링크 참고
파이썬에서 selenium을 이용하여 크롬 브라우저 띄우기
http://yonoo88.tistory.com/1200
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from selenium import webdriver import time driver = webdriver.Chrome('C://chromedriver.exe') driver.implicitly_wait(3) driver.get('http://www.naver.com') driver.maximize_window() driver.find_element_by_class_name('lg_local_btn').click() driver.find_element_by_id('id').send_keys('아이디') driver.find_element_by_id('pw').send_keys('비번') driver.find_element_by_class_name('btn_global').click() time.sleep(3) driver.close() | cs |
'지식메모 > Python' 카테고리의 다른 글
Qt designer로 생성한 .ui 파일 파이썬 .py로 변환 (0) | 2018.08.17 |
---|---|
python 3.7.0 에서 pyside2를 설치하여 Qt Designer 설치하기 (2) | 2018.08.14 |
파이썬과 자바 selenium 사용법 간단한 기능 비교 및 xpath 사용법 (0) | 2018.08.08 |
파이썬 TabError: inconsistent use of tabs and spaces in indentation 에러 해결 (Atom 에디터 옵션 설정) (0) | 2018.08.08 |
파이썬에서 selenium을 이용하여 크롬 브라우저 띄우기 (0) | 2018.08.07 |
xbox 0x8015dc0c 로그인 불가 해결하기
진짜 이상한 걸로 스트레스 주는 사이트들은 반성해야함
xbox 앱 로그인이 안되는데 0x8015dc0c 이런 에러코드가 발생한다.
고객지원가서 에러코드 검색해도 나오지도 않는다. 뭐 이따구인지..
보니까 이 문제 겪는 사람이 꽤 많다 근데도 에러코드 설명을 추가하지 않는 건 무슨 똥고집인지
아무튼 이 에러코드의 원인은 나이 인증을 하지 않아서이다.
Xbox 홈페이지에 들어가 로그인 한 후 오른쪽 상단에 자신의 로그인 된 계정을 눌러준다.
그 메뉴에서 프로필을 눌러준다.
그럼 confirm age 라는 페이지가 나오는데 클릭한다.
그럼 아이핀 인증 창이 나온다.
인증완료 하면 이제 로그인이 된다.
마이크로소프트는 이 에러코드를 빨리 반영해놓길.
'지식메모 > 꿀팁' 카테고리의 다른 글
Windows 10 iSO 파일 다운로드 받기 (0) | 2016.07.25 |
---|---|
synergy를 사용하여 윈도우와 리눅스(Cent OS) 키보드 마우스 같이 사용하기 (0) | 2016.07.11 |
이클립스 maven 프로젝트에서 pom.xml 에러 Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin 에러 해결 (3) | 2016.06.08 |
HP Deskjet 2540 시리즈 모델로 주민등록등본 가족관계증명서 출력하기 (9) | 2016.02.12 |
하드디스크 용량부족시 폴더별 용량을 한눈에 볼 수 있는 프로그램 - TreeSize Free (0) | 2016.01.24 |