2020 신입 백엔드 개발자 후레임

반응형

※ 파이썬과 파이썬 에디터가 설치되어 있다는 가정하에 설명합니다.
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

import re
import time
import pyperclip

driver = webdriver.Chrome('C:/chromedriver.exe')
driver.implicitly_wait(3)

login=1

id='' # 자신의 디씨 ID 입력
pw='' # 자신의 디씨 PW 입력

if login==1 :

    # 로그인
    driver.get('https://gall.dcinside.com/')
    time.sleep(1)

    driver.find_element_by_xpath("//a[contains(text(),'로그인')]").click()
    time.sleep(1)

    pyperclip.copy(f'{id}') # ID
    driver.find_element_by_id('id').send_keys(Keys.CONTROL, 'v')
    time.sleep(1)

    pyperclip.copy(f'{pw}') # PW
    driver.find_element_by_id('pw').send_keys(Keys.CONTROL, 'v')
    driver.find_element_by_xpath("//button[@class='btn_blue small btn_wfull']").click()
    time.sleep(1)

    # 내 게시글 이동
    driver.get(f'https://gallog.dcinside.com/{id}/posting')
    
    # 내 댓글 이동
    #driver.get(f'https://gallog.dcinside.com/{id}/comment')

    html = driver.page_source
    bs = BeautifulSoup(html, 'lxml')

	# 게시글or댓글 개수 알아내기
    result = str(bs.find('span', class_='num'))
    result=re.sub('<.+?>', '', result, 0, re.I|re.S) # 태그 제거
    result=result.lstrip("(")
    result=result.rstrip(")")
    cnt_posting = int(result)
    
    # 개수에 맞춰 삭제
    for i in range(cnt_posting):
    	try:
        	driver.find_element_by_xpath("//button[@class='btn_delete btn_svc btn_lightgrey smaller']").click()
        	time.sleep(4) # (삭제)를 누른 후의 딜레이[초]
        	driver.switch_to.alert.accept()
        	time.sleep(4) # (확인)을 누른 후의 딜레이[초]
		except Exception as err:
        	print(err)
            pass # no such alert 에러가 발생해도 삭제를 계속합니다

본 소스를 사용함으로 인해서 발생될 수 있는 불이익에 대한 책임은 사용자에게 있습니다.

 

 

 

 

 

 

 

 

발생할 수 있는 에러

에러1.

ModuleNotFoundError : No module named 'selenium'

원인

셀레니움(selenium)이 설치되지 않은 경우

 

해결책 

pip install selenium

으로 셀레니움을 설치해줍니다.

 

 

 

에러2. 

 

selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH.

원인

크롬 드라이버(Chrome driver)가 설치되지 않은 경우

 

해결책

크롬에서 도움말 > Chrome 정보에 들어가 자신의 크롬 버전 확인 후

버전에 맞는 ChromeDriver 설치.

 

 

 

개선할 점

속도

- 캡챠(reCaptcha)가 뜨는 걸 해결할 방법이 없어 현재로서는 8초정도의 딜레이가 불가피합니다.

- time.sleep(0.5)로 주면 딜레이 없이 삭제 가능하나 캡챠가 10분 간격으로 뜨는걸 경험하실겁니다.

 

no such alert

selenium.common.exceptions.NoAlertPresentException: Message: no such alert

- 가끔 alert창을 인식하지 못하고 프로그램이 종료되는데, 이 경우 다시 실행될 수 있도록 수정하겠습니다.

 

 

위에 언급된 외의 증상은 댓글을 남겨주시면 해결책을 찾아볼 수 있도록 하겠습니다.

 

 

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

잠깐! 비밀로 남겨야 할 만한 내용인가요? 그렇다면 차라리 이메일을 보내주시기 바랍니다.

  1. ㅇㅇ 2020.11.19 22:50

    아이피 차단같응건 대응 못하나요?

  2. 파린이 2020.11.24 21:12

    가장 마지막쯤 except에서 구문오류가 뜨는데 왜 그런가요..?

    • Favicon of https://papaguo.xyz BlogIcon 후레임 2020.12.17 16:57 신고

      구체적으로 몇 번째줄 어떤 에러인지 말씀해주시면 도움을 드릴 수 있을것 같네요!

  3. ㅇㅇ 2021.01.25 20:41

    File "C:/Users/name/PycharmProjects/pythonProject/venv/pip.py", line 59
    except Exception as err:
    ^
    SyntaxError: invalid syntax

    Process finished with exit code 1

    이라는데 왜 그럴까요?
    pycharm 사용중입니다

  4. ㅇㅇ 2021.04.02 10:37

    qt이용해서 gui로 재배포 해도 될까요?

  5. ㅇㅇ 2021.04.05 05:33

    오 이거 리눅스에선 안됐는데 윈도우에서는 되네요.. 리눅스에서는 크로미움창 열리고나서 아무런 반응이 없었는데 원인이 뭘까요

  6. ㅇㅇ 2021.07.08 17:20

    Traceback (most recent call last):
    File "C:\Users\UIJIN KIM\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 72, in start
    self.process = subprocess.Popen(cmd, env=self.env,
    File "C:\Users\UIJIN KIM\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
    File "C:\Users\UIJIN KIM\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1420, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
    FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "C:\Users\UIJIN KIM\OneDrive\바탕 화면\asd.py", line 10, in <module>
    driver = webdriver.Chrome('C:/chromedriver.exe')
    File "C:\Users\UIJIN KIM\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__
    self.service.start()
    File "C:\Users\UIJIN KIM\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 81, in start
    raise WebDriverException(
    selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

    트랙백이 이렇게 걸려서 정상적인 작동이 되지 않습니다. 어떻게 하면 좋을까요.

  7. ㅇㅇ 2021.07.16 09:58

    except Exception as err:
    마지막 이 부분에서 inconsistent use of tabs and space in indentation이라고 뜨면서 : 뒤에가 빨간색으로 죽 그어져 있어요 ㅠㅠ 어떻게 해결하나요

  8. ㅇㅇ 2022.02.15 02:44

    유동클리너 소스도 알 수 없을까오

  9. ㅇㅇ 2022.08.22 13:11

    except Exception as err : 이 부분에서 invalid syntax 오류가 계속 발생하네요