tbAutoBuy

僅供學(xué)習(xí)參考

from selenium import webdriver
import datetime
import time

# ====  標(biāo)識(shí)登錄狀態(tài)、重試次數(shù) ====
MAX_LOGIN_RETRY_TIMES = 2

current_retry_login_times = 0
login_success = False


def __login_operates():
    driver.get("https://www.taobao.com")
    try:
        if driver.find_element_by_link_text("親,請登錄"):
            print("沒登錄,開始點(diǎn)擊登錄按鈕...")
            driver.find_element_by_link_text("親,請登錄").click()
            print("請使用手機(jī)淘寶掃描屏幕上的二維碼進(jìn)行登錄...")
            time.sleep(15)
    except:
        print("已登錄,開始執(zhí)行跳轉(zhuǎn)...")
        global login_success
        global current_retry_login_times
        login_success = True
        current_retry_login_times = 0


def login():
    print("開始嘗試登錄...")
    __login_operates()
    global current_retry_login_times
    while current_retry_login_times < MAX_LOGIN_RETRY_TIMES:
        current_retry_login_times = current_retry_login_times + 1
        print("當(dāng)前嘗試登錄次數(shù):" + str(current_retry_login_times))
        __login_operates()
        if login_success:
            print("登錄成功")
            break
        else:
            print("等待登錄中...")

    if not login_success:
        print("規(guī)定時(shí)間內(nèi)沒有掃碼登錄淘寶成功,執(zhí)行失敗,退出腳本!!!")
        exit(0)

    # time.sleep(3)
    now = datetime.datetime.now()
    print('login success:', now.strftime('%Y-%m-%d %H:%M:%S'))


def __refresh_keep_alive():
    # 重新加載購物車頁面,定時(shí)操作,防止長時(shí)間不操作退出登錄
    driver.get("https://cart.taobao.com/cart.htm")
    print("刷新購物車界面,防止登錄超時(shí)...")
    time.sleep(60)


def keep_login_and_wait():
    print("當(dāng)前距離搶購時(shí)間點(diǎn)還有較長時(shí)間,開始定時(shí)刷新防止登錄超時(shí)...")
    while True:
        current_time = datetime.datetime.now()
        if (buy_time_object - current_time).seconds > 180:
            __refresh_keep_alive()
        else:
            print("搶購時(shí)間點(diǎn)將近,停止自動(dòng)刷新,準(zhǔn)備進(jìn)入搶購階段...")
            break


def buy():
    # 打開購物車
    driver.get("https://cart.taobao.com/cart.htm")
    time.sleep(1)

    # 點(diǎn)擊購物車?yán)锶x按鈕
    if driver.find_element_by_id("J_SelectAll1"):
        driver.find_element_by_id("J_SelectAll1").click()
        print("已經(jīng)選中購物車中全部商品 ...")

    submit_succ = False
    retry_submit_times = 0
    while True:
        now = datetime.datetime.now()
        if now >= buy_time_object:
            print("到達(dá)搶購時(shí)間,開始執(zhí)行搶購...嘗試次數(shù):" + str(retry_submit_times))
            if submit_succ:
                print("訂單已經(jīng)提交成功,無需繼續(xù)搶購...")
                break
            if retry_submit_times > 50:
                print("重試搶購次數(shù)達(dá)到上限,放棄重試...")
                break

            retry_submit_times = retry_submit_times + 1

            try:
                # 點(diǎn)擊結(jié)算按鈕
                if driver.find_element_by_id("J_Go"):
                    driver.find_element_by_id("J_Go").click()
                    print("已經(jīng)點(diǎn)擊結(jié)算按鈕...")
                    click_submit_times = 0
                    while True:
                        try:
                            if click_submit_times < 10:
                                driver.find_element_by_link_text('提交訂單').click()
                                print("已經(jīng)點(diǎn)擊提交訂單按鈕")
                                submit_succ = True
                                break
                            else:
                                print("提交訂單失敗...")
                        except Exception as ee:
                            # print(ee)
                            print("沒發(fā)現(xiàn)提交訂單按鈕,可能頁面還沒加載出來,重試...")
                            click_submit_times = click_submit_times + 1
                            time.sleep(0.1)
            except Exception as e:
                print(e)
                print("不好,掛了,提交訂單失敗了...")

        time.sleep(0.5)


if __name__ == '__main__':
    # ==== 設(shè)定搶購時(shí)間 (修改此處,指定搶購時(shí)間點(diǎn))====
    cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    BUY_TIME = input(f"請輸入搶購時(shí)間,格式如 {cur_time} :\n")
    buy_time_object = datetime.datetime.strptime(BUY_TIME, '%Y-%m-%d %H:%M:%S')
    print(f"已設(shè)置搶購時(shí)間為:{buy_time_object}")
    now_time = datetime.datetime.now()
    if now_time > buy_time_object:
        print("當(dāng)前已過搶購時(shí)間,請確認(rèn)搶購時(shí)間是否填錯(cuò)...")
        exit(0)

    print("正在打開chrome瀏覽器...")
    # 讓瀏覽器不要顯示當(dāng)前受自動(dòng)化測試工具控制的提醒
    option = webdriver.ChromeOptions()
    option.add_argument('disable-infobars')
    #windows
    driver = webdriver.Chrome(executable_path='D:\Programs\Python\Python36\chromedriver.exe', chrome_options=option)
    #linux
   # driver = webdriver.Chrome(executable_path='assets/chromedriver', chrome_options=option)
    driver.maximize_window()
    print("chrome瀏覽器已經(jīng)打開...")

    login()
    keep_login_and_wait()
    buy()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 樓主大大看到我,再次誠懇請教,業(yè)績和成長性好的中小盤股票往往價(jià)格高,如何判斷其價(jià)格是否高估已透支其內(nèi)在成長性,因?yàn)?..
    養(yǎng)豬的琪琪閱讀 4,297評論 3 6
  • 法語人微信號:fayuren123 北京市 01 北京大學(xué) 招生人數(shù):4人(2019年) 參考書目:本專業(yè)不提供考...
    木金木水火土的木閱讀 1,470評論 0 0
  • 久違的晴天,家長會(huì)。 家長大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,818評論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,835評論 0 11
  • 可愛進(jìn)取,孤獨(dú)成精。努力飛翔,天堂翱翔。戰(zhàn)爭美好,孤獨(dú)進(jìn)取。膽大飛翔,成就輝煌。努力進(jìn)取,遙望,和諧家園。可愛游走...
    趙原野閱讀 3,488評論 1 1

友情鏈接更多精彩內(nèi)容