正確移除 selenium webdriver
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
正確隱藏 pyppeteer
await page.evaluateOnNewDocument('''() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
}
''')
使用 pyppeteer 碰到的錯誤
-
pyppeteer.errors.ElementHandleError: Error: failed to find element matching selector ".btn_ok"
我使用了下面的代碼后出現(xiàn)的:為了實現(xiàn)檢測元素是否存在,存在則程序結(jié)束嗅虏,不存在則重試
btn_ok = await page.Jeval('.btn_ok', 'node => node.style')
mark解決辦法:
btn_ok = await page.querySelector('[class="nc_iconfont btn_ok"]')
但是使用這個之后,當滑動失敗之后洛姑,重現(xiàn)刷新滑動驗證碼之后,又會出現(xiàn)下面的錯誤皮服。
更新(2020-01-20):
之前的理解錯誤了楞艾,這個根本原因是執(zhí)行關(guān)閉瀏覽器
await browser.close()
的時候沒有權(quán)限刪除用戶的瀏覽數(shù)據(jù)参咙。解決辦法:
定義瀏覽器的時候設(shè)置參數(shù)
'userDataDir': r'D:\temporary'
,指定一個用戶可以執(zhí)行的目錄,這樣的話就可以了硫眯。但是這樣的話蕴侧,相當于保存了用戶的瀏覽數(shù)據(jù)。
可能又會碰到這么個錯誤两入,事件循環(huán)打開瀏覽器后净宵,并沒有執(zhí)行,直接返回結(jié)果裹纳。
看了一下文檔择葡,調(diào)用
createIncogniteBrowserContext()
直接打開一個無痕瀏覽器。這樣就爽多了關(guān)閉的時候需要注意分開關(guān)閉剃氧,無痕關(guān)閉敏储,正常打開的瀏覽器也需要關(guān)閉。
pyppeteer.errors.NetworkError: Protocol Error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
解決辦法:這是由于庫本身的問題朋鞍。pyppeteer 庫的問題已添。
具體可參考 天貓?zhí)詫氈跖老x神器 -- Pyppeteer
也可以降低 websockets 的版本,改為 6.0 的版本
pip install websockets==6.0
這樣問題就會少很多