Index
설치 환경
OS : windows 11
Python : Python 3.11.1
Notion에서 Tistory로 자동 업로드 방법
설치 방법은 위 블로그에서 자세하게 설명되어 있다.
windows에서 사용하려고 하는 경우 pip3 install에서 인코딩 에러가 날 것이다.
그때 아래 해결 방법대로 따라하면 윈도우에서 에러없이 실행시킬 수 있다.
config.py 파일이 각 토큰이나 비밀번호 값이 평문으로 노출되므로, 다음과 같은 방법을 통해 숨길 수 있다.
N2T 오류(ERROR) 및 해결방법
TISTORY의 REDIRECT_URI 경로 지정 오류
Traceback (most recent call last):
File "D:\N2T\main.py", line 163, in <module>
client = Notion2Tistory(cfg, sleep_time=5, selenium_debug=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\N2T\main.py", line 56, in __init__
authorize_code = self.s_client.get_tistory_authorize_code(cfg.TISTORY.CLIENT_ID, cfg.TISTORY.REDIRECT_URI)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\N2T\clients\SeleniumClient.py", line 76, in get_tistory_authorize_code
code = soup.script.text.split('code=')[1].split('&state')[0]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
아래 TISTORY의 REDIRECT_URI에서 마지막 ‘/’ 때문에 ‘list index out of range’ 오류가 발생한다.
마지막 ‘/’을 지워주면 오류를 해결할 수 있다.
- 수정 전
TISTORY=dotdict(
ID='kakao email',
PW='kakao password',
BLOG_NAME='she11',
SECRET_KEY='api secret key',
CLIENT_ID='api id',
REDIRECT_URI='https://she11.tistory.com/',
),
- 수정 후
TISTORY=dotdict(
ID='kakao email',
PW='kakao password',
BLOG_NAME='she11',
SECRET_KEY='api secret key',
CLIENT_ID='api id',
REDIRECT_URI='https://she11.tistory.com',
),
pip3 install -r requirements.txt 오류
PS D:\N2T> pip3 install -r requirements.txt
Collecting git+https://github.com/wsykala/notion-py.git (from -r requirements.txt (line 7))
Cloning https://github.com/wsykala/notion-py.git to c:\users\exit3\appdata\local\temp\pip-req-build-a89svzhl
Running command git clone --filter=blob:none --quiet https://github.com/wsykala/notion-py.git 'C:\Users\exit3\AppData\Local\Temp\pip-req-build-a89svzhl'
Resolved https://github.com/wsykala/notion-py.git to commit 37e04f8f98e82ac408f3655a44b5641faa32fea7
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [7 lines of output]
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<pip-setuptools-caller>", line 34, in <module>
File "C:\Users\exit3\AppData\Local\Temp\pip-req-build-a89svzhl\setup.py", line 4, in <module>
long_description = fh.read()
^^^^^^^^^
UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 11949: illegal multibyte sequence
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
requirements.txt를 한줄 씩 받아와서 pip3 install하는 부분에서 위와 같은 에러가 발생할 수 있다.
- requirements.txt
beautifulsoup4
requests
selenium
webdriver_manager
tqdm
lxml
git+https://github.com/wsykala/notion-py.git
마지막 줄의 notion 관련한 패키지에서 발생하는 에러이므로, 먼저 마지막 줄을 지워서 나머지 패키지를 설치한다.
이후 git clone으로 notion-py를 다운로드 받는다.
git clone https://github.com/wsykala/notion-py.git
notion-py 폴더에서 setup.py를 설치하면 아까와 동일한 에러가 발생한다.
PS D:\N2T> cd .\notion-py\
PS D:\N2T\notion-py> python setup.py install
Traceback (most recent call last):
File "D:\N2T\notion-py\setup.py", line 4, in <module>
long_description = fh.read()
^^^^^^^^^
UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 11949: illegal multibyte sequence
setup.py 파일을 수정하자.
- 수정 전
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
- 수정 후
import setuptools
with open("README.md", "r", encoding='utf-8') as fh:
long_description = fh.read()
이후 정상적으로 설치가 가능해진다.
PS D:\N2T\notion-py> pip3 install -r requirements.txt
PS D:\N2T\notion-py> python setup.py install
[2023. 02. 07] no such element 오류
카카오톡 로그인 element id 변경으로 인한 오류
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="input-loginKey--1"]"}
(Session info: headless chrome=109.0.5414.120)
해결방법
SeleniumClient.py 파일 해당부분 수정
except:
# 환경마다 로그인 페이지가 다른 경우를 대비하여 다른 XPATH 지정
print('[진행중] 카카오 로그인 재시도..')
self.driver.find_element(By.XPATH, '//*[@id="loginKey--1"]').send_keys(id)
sleep(self.t // 2)
# 비밀번호 입력
self.driver.find_element(By.XPATH, '//*[@id="password--2"]').send_keys(pw)
sleep(self.t // 2)
Uploaded by N2T