본문 바로가기
프로그래밍/파이썬

배민 배달의민족 사장님광장 아이디별 매출 보기 크롤링

by 젤리씨 2021. 7. 20.
728x90

배민 배달의민족 사장님광장 아이디별 매출 보기 크롤링하는 법 입니다

 

소스는 아래와 같으며 저는 오라클 DB에 아이디 비밀번호 브랜드명을 넣어서 값을 가져오는 방법을 택했습니다

 

파이썬 실행하는 당일 매출만 되며 그외에는 추가로 xpath를 클릭하는 방법으로 변경하시면 됩니다.

 

from selenium import webdriver
from urllib.parse import quote_plus
from bs4 import BeautifulSoup
import time
import os
import shutil
import inspect
import cx_Oracle as ora
import pywintypes
import win32api
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

def get_today() :
    now = time.localtime()
    s = "%04d-%02d-%02d" % (now.tm_year, now.tm_mon, now.tm_mday)
    return s

today = get_today()

#print('오라클접속')
try:
    
    ora.init_oracle_client(lib_dir=r"C:\instantclient_19_10")
    conn = ora.connect('유저아이디/비밀번호@아이피주소:포트번호/SID')
    cursor = conn.cursor()
    sql = "쿼리"
    cursor.execute(sql)
    rows = cursor.fetchall()
    
    for row in rows:
        #print(str(row[0]), str(row[1]), str(row[2])) #전체 아이디, 비밀번호,브랜드명 보기

        st_id = str(row[0])
        st_pw = str(row[1])
        st_brand = str(row[2])

        driver = webdriver.Chrome("./chromedriver.exe")

        #크롬창 최대화
        driver.maximize_window()
        #크롬창 최소화
        #driver.minimize_window()

        #URL 접속
        driver.get("https://ceo.baemin.com/self-service/?utm_source=ceo&utm_medium=top&utm_campaign=self") 

        time.sleep(4)



        #로그인
        input_id = driver.find_element_by_name('id')
        input_pw = driver.find_element_by_name('password')
        input_id.send_keys(st_id)
        input_pw.send_keys(st_pw)
        #로그인클릭
        driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/form/button').click()

        time.sleep(4)

        #본인인증 체크
        if driver.find_elements_by_xpath('//*[@id="root"]/div/div[1]/div/div[2]/div/span/a'):
            print('고객인증 다음에할래요 클릭')
            driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div/div[2]/div/span/a').click()
        else:
            print('고객인증 없음')

        time.sleep(4)
        #주문내역 메뉴가 있으면
        if driver.find_elements_by_xpath('//*[@id="root"]/div/div[1]/div[2]/div/nav/ul/li[6]/ul/li[1]/a'):
                                          
            print('정상')
            #주문내역 클릭
            driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/div/nav/ul/li[6]/ul/li[1]/a').click()
            time.sleep(4)

            #날짜직접선택
            driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[3]/div[1]/div/div[1]/button[1]/div/p[2]').click()                                          
            time.sleep(3)

            #일.주 선택(자동 당일선택)
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/form/div[2]/div/div/div[1]/label[1]/p').click()                                          
            time.sleep(3)

            #적용 선택
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/form/div[3]/button').click()
            time.sleep(3)


            #건수
            input_count = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[3]/div[1]/div/div[2]/div[1]/span[2]/b').text
                                                    
            #금액
            input_amount = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[3]/div[1]/div/div[2]/div[2]/span[2]/b').text
            
        elif driver.find_elements_by_xpath('//*[@id="root"]/div/div[3]/div/form/div[1]/button/i'):
            print('광고서비스 진행을 위해 고객확인 의무 이행 무시')
            time.sleep(1)
            driver.find_element_by_xpath('//*[@id="root"]/div/div[3]/div/form/div[1]/button/i').click()
        
        else:
            print('고객확인의무 무시')
            
            time.sleep(1)
            #팝업닫기
            driver.find_element_by_xpath('//*[@id="root"]/div/div[3]/div[1]/form/div[1]/button/i').click()
                                          
            #주문내역클릭
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[2]/div/nav/ul/li[6]/ul/li[1]/a').click()

            time.sleep(3)

            #날짜직접선택
            driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[3]/div[1]/div/div[1]/button[1]/div/p[2]').click()
                                          
            time.sleep(3)

            #일.주 선택
            driver.find_element_by_xpath('//*[@id="root"]/div/div[3]/div[1]/form/div[2]/div/div/div[1]/label[1]/p').click()                                          
            time.sleep(3)

            #적용 선택
            driver.find_element_by_xpath('//*[@id="root"]/div/div[3]/div[1]/form/div[3]/button').click()
            time.sleep(3)

            #건수
            input_count = driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[3]/div[1]/div/div[2]/div[1]/span[2]/b').text
                                                    
            #금액
            input_amount = driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[3]/div[1]/div/div[2]/div[2]/span[2]/b').text

        
        

        input_count2  = input_count.replace(',','')
        input_amount2 = input_amount.replace(',','')
        
        
        #print(st_brand) #브랜드명
        #print(format(int(input_count2),",")) #건수
        summ = int(input_amount2)-(int(input_count2)*2000)
        #print(format(int(summ),",")) #금액  #전체매출-(건수*2000원)
        print(st_brand + "  "+ format(int(input_count2),",")+ " 건  "+ format(int(summ),",")+" 원"+ "\n")
        time.sleep(3)
        
        #당일일자로 txt파일생성 위치는 파이썬파일과 동일
        f=open(today+'.txt','a')

        f.write(st_brand + "  "+ format(int(input_count2),",")+ " 건  "+ format(int(summ),",")+" 원"+ "\n")
        
        driver.quit()
        #설정클릭
        #print('설정클릭')
        #driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/div/nav/div/div/a[2]').click()
        #time.sleep(3)
        #로그아웃클릭
        #print('로그아웃클릭')
        #driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[3]/div[1]/div/div/div[1]/div[2]/a').click()
        
    cursor.close()
    conn.close()
    print('전체 완료!!!')
    f.write('전체 완료!!!')
    f.close()
	
    #크롤링 에러없이 전체완료시 txt파일명끝에 완료를 붙임
    os.rename(today+'.txt',today+'_완료'+'.txt')

    

except Exception as ex:     # 에러 종류
    print('에러가 발생 했습니다', ex)  
    #f=open(today+'.txt','a')
    #f.write('에러가 발생 했습니다', ex)
    #time.sleep(500)
728x90

댓글