pyppeteer 實在是有點坑,坑太多了,填不完。
使用 pyppeteer 碰到的錯誤
pyppeteer.errors.ElementHandleError: Error: failed to find element matching selector ".btn_ok"我使用了下面的代碼後出現的:為了實現檢測元素是否存在,存在則程序結束,不存在則重試btn_ok = await page.Jeval('.btn_ok', 'node => node.style')
解決辦法:btn_ok = await page.querySelector('[class="nc_iconfont btn_ok"]')但是使用這個之後,當滑動失敗之後,重現刷新滑動驗證碼之後,又會出現下面的錯誤。更新(2020-01-20):之前的理解錯誤了,這個根本原因是執行關閉瀏覽器 await browser.close() 的時候沒有權限刪除用戶的瀏覽數據。解決辦法:定義瀏覽器的時候設置參數 'userDataDir': r'D:\temporary',指定一個用戶可以執行的目錄,這樣的話就可以了。但是這樣的話,相當於保存了用戶的瀏覽數據。可能又會碰到這麼個錯誤,事件循環打開瀏覽器後,並沒有執行,直接返回結果。看了一下文檔,調用 createIncogniteBrowserContext()直接打開一個無痕瀏覽器。這樣就爽多了關閉的時候需要注意分開關閉,無痕關閉,正常打開的瀏覽器也需要關閉。pyppeteer.errors.NetworkError: Protocol Error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
解決辦法:這是由於庫本身的問題。pyppeteer 庫的問題。
具體可參考 天貓淘寶知乎爬蟲神器 -- Pyppeteer
也可以降低 websockets 的版本,改為 6.0 的版本
pip install websockets==6.0
這樣問題就會少很多
這個文章會一直更新,碰到了就會更新,未完待續。。。