使用pyppeteer淘寶登入
這是崔斯特的第八十七篇原創文章
使用pyppeteer淘寶登入,獲取Cookies
現在淘寶的商品搜尋頁必須要登入才能見,所以必須要cookies才能進行下一步操作。本期介紹如何使用pyppeteer登入淘寶,獲取Cookies。
pyppeteer介紹
地址: https://github.com/miyakogi/pyppeteer
介紹:Unofficial Python port of puppeteer JavaScript (headless) chrome/chromium browser automation library.非官方的chrome瀏覽器,前身是JavaScript的puppeteer
安裝: python3 -m pip install pyppeteer
開啟網站並截圖
import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://zhangslob.github.io/') await page.screenshot({'path': 'zhangslob.png'}) await browser.close() asyncio.get_event_loop().run_until_complete(main())
第一次執行時需要下載Chromium,你可以提前在終端輸入 pyppeteer-install
來下載。
登入淘寶
整體邏輯很簡單:
- 設定pyppeteer啟動項,開啟一個瀏覽器
- 開啟淘寶登入頁面
- 修改瀏覽器屬性
- 輸入賬號密碼
- 滑動滑塊
- 登入
程式碼太長,可以直接去Github上看,記得要加上自己的賬號密碼。記得要用小號,如果長時間使用一個賬號,會出現各種各樣的驗證。
登入的主程式碼:
async def taobao_login(username, password, url): """ 淘寶登入主程式 :param username: 使用者名稱 :param password: 密碼 :param url: 登入網址 :return: 登入cookies """ ### await page.click('#J_QRCodeLogin > div.login-links > a.forget-pwd.J_Quick2Static') page.mouse time.sleep(1) # 輸入使用者名稱,密碼 await page.type('#TPL_username_1', username, {'delay': input_time_random() - 50})# delay是限制輸入的時間 await page.type('#TPL_password_1', password, {'delay': input_time_random()}) time.sleep(2) # 檢測頁面是否有滑塊。原理是檢測頁面元素。 slider = await page.Jeval('#nocaptcha', 'node => node.style')# 是否有滑塊 if slider: print('當前頁面出現滑塊') # await page.screenshot({'path': './headless-login-slide.png'}) # 截圖測試 flag, page = await mouse_slide(page=page)# js拉動滑塊過去。 if flag: await page.keyboard.press('Enter')# 確保內容輸入完畢,少數頁面會自動完成按鈕點選 print("print enter", flag) await page.evaluate('''document.getElementById("J_SubmitStatic").click()''')# 如果無法通過回車鍵完成點選,就呼叫js模擬點選登入按鈕。 time.sleep(2) cookies_list = await page.cookies() print(cookies_list) return await get_cookie(page)# 匯出cookie 完成登陸後就可以拿著cookie玩各種各樣的事情了。 else: print("") await page.keyboard.press('Enter') print("print enter") await page.evaluate('''document.getElementById("J_SubmitStatic").click()''') await page.waitFor(20) await page.waitForNavigation() try: global error# 檢測是否是賬號密碼錯誤 print("error_1:", error) error = await page.Jeval('.error', 'node => node.textContent') print("error_2:", error) except Exception as e: error = None finally: if error: print('確保賬戶安全重新入輸入') # 程式退出。 loop.close() else: print(page.url) return await get_cookie(page)
所有程式碼在 AwesomeCrawler/taobao_login
如何建立Cookie池
必須多個賬號,那麼如何註冊多個淘寶賬號呢。。
- 可以通過第三方提供手機號驗證碼服務商,通過pyppeteer註冊賬號,儲存賬號資訊
- 登入賬號並儲存在redis
- 開執行緒檢查賬號是否已過期,若過期重新登入即可
b