pyppeteer登錄頭條獲取cookie爬坑。

首先需要需要pip 卸載 websockets 安裝指定版本的。

pip uninstall websockets #卸載websockets
pip install websockets==6.0 #指定安裝6.0版本

否則,你會在

waitForSelector 判斷元素是否出現,而且頁面上js跳轉後的新頁面,這個地方會出現上面的報錯。

Runtime.callFunctionOn: Target closed.

參考鏈接:https://www.cnblogs.com/baihuitestsoftware/p/10531462.html

保存cookie:

cookies2 = await page.cookies()
    await save_cookie(cookies2)

.設置Cookie:(pyppeteer的設置cookie的方法每次傳一個dict進去。所以需要循環cookie列表。)

await page.goto('https://www.toutiao.com/')
    for cookie in cookie1:
        await page.setCookie(cookie)
    await page.goto('https://www.toutiao.com/')
    print("登錄成功")
    await page.waitForSelector('.logged', {'timeout': 300000})

整體代碼:(首次登錄輸入賬戶,二次直接登錄成功):

# -*- coding: utf-8 -*-
import asyncio
from pyppeteer import launch
import json


# 保存cookie
async def save_cookie(cookie):
    with open("cookie.json", 'w+', encoding="utf-8") as file:
        json.dump(cookie, file, ensure_ascii=False)


# 讀取cookie
async def load_cookie():
    with open("cookie.json", 'r', encoding="utf-8") as file:
        cookie = json.load(file)
    return cookie


# 登錄函數
async def login(page):
    await page.setViewport({'width': 1366, 'height': 768})
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                            'Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299')
    await page.goto('https://sso.toutiao.com/')
    await page.waitForSelector('.logged', {'timeout': 300000})
    cookies2 = await page.cookies()
    await save_cookie(cookies2)
    print(cookies2)


# 加載首頁
async def index(page, cookie1):
    await page.setViewport({'width': 1366, 'height': 768})
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                            'Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299')
    await page.goto('https://www.toutiao.com/')
    for cookie in cookie1:
        await page.setCookie(cookie)
    await page.goto('https://www.toutiao.com/')
    print("登錄成功")
    await page.waitForSelector('.logged', {'timeout': 300000})
    await asyncio.sleep(60)
    cookies2 = await page.cookies()
    await save_cookie(cookies2)
    print(cookies2)


# 主函數
async def main():
    # 初始化瀏覽器
    browser = await launch({'headless': False,
                            'dumpio': True,
                            'args': [
                                # '--disable-extensions',
                                # '--disable-bundled-ppapi-flash',
                                # '--mute-audio',
                                # '--no-sandbox',
                                # '--disable-setuid-sandbox',
                                '--disable-dev-shm-usage',
                                '--shm-size=1gb'
                                '--disable-gpu',
                            ],
                            'executablePath': 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
                            })
    # 打開新標籤頁
    page = await browser.newPage()
    cookie = await load_cookie()
    # 登錄函數
    await index(page, cookie)


# 運行入口
if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(main())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章