一、前言以前使用selenium的無頭瀏覽器,自從phantomjs2016后慢慢不更新了之后,selenium也開始找下家,這時候谷歌的chrome率先搞出來無頭瀏覽器并開放了各種api,隨后firefox也開始做。
二、pyppeteergithub地址:https://miyakogi./pyppeteer/ pyppeteer這個項(xiàng)目是非官方的,是基于谷歌官方puppeteer的python版本。 注意:本來chrome就問題多多,puppeteer也是各種坑,加上pyppeteer是基于前者的改編python版本,也就是產(chǎn)生了只要前兩個有一個有bug,那么pyppeteer就會原封不動的繼承下來,本來這沒什么,但是現(xiàn)在遇到的問題就是pyppeteer這個項(xiàng)目從18年9月份之后就沒更新過了,前兩者都在不斷的更新迭代,而pyppeteer一直不更新,導(dǎo)致很多bug根本沒人修復(fù)。 遇到的錯誤:1)pyppeteer.errors.NetworkError: Protocol error Network.getCookies: Target close async def scroll_page(page):
cur_dist = 0
height = await page.evaluate("() => document.body.scrollHeight")
while True:
if cur_dist < height:
await page.evaluate("window.scrollBy(0, 500);")
await asyncio.sleep(0.1)
cur_dist += 500
else:
break
可以把python第三方庫websockets版本7.0改為6.0就可以了,親測可用。 pip uninstall websockets #卸載websockets pip install websockets==6.0 #指定安裝6.0版本
2)chromium瀏覽器多開頁面卡死問題
3)瀏覽器窗口很大,內(nèi)容顯示很小 browser = await launch({'headless': False,'dumpio':True, 'autoClose':False,'args': ['--no-sandbox', '--window-size=1366,850']})
await page.setViewport({'width':1366,'height':768})
通過上面設(shè)置Windows-size和Viewport大小來實(shí)現(xiàn)網(wǎng)頁完整顯示。 但是對于那種向下無限加載的長網(wǎng)頁這種情況如果瀏覽器是可見狀態(tài)會顯示不全,針對這種情況的解決方法就是復(fù)制當(dāng)前網(wǎng)頁新開一個標(biāo)簽頁粘貼進(jìn)去就正常了 三、實(shí)際項(xiàng)目示例
import asyncio from pyppeteer import launch import time async def main():exepath = 'C:/Users/tester02/AppData/Local/Google/Chrome/Application/chrome.exe' browser = await launch({'executablePath': exepath, 'headless': False, 'slowMo': 30}) page = await browser.newPage() await page.setViewport({'width': 1366, 'height': 768}) await page.goto('http://192.168.2.66') await page.type("#Login_Name_Input", "test02") await page.type("#Login_Password_Input", "12345678", ) await page.waitFor(1000) await page.click("#Login_Login_Btn") await page.waitFor(3000) await browser.close() asyncio.get_event_loop().run_until_complete(main())
import asyncio import time from pyppeteer import launch async def gmailLogin(username, password, url): #'headless': False如果想要瀏覽器隱藏更改False為True # 127.0.0.1:1080為代理ip和端口,這個根據(jù)自己的本地代理進(jìn)行更改,如果是vps里或者全局模式可以刪除掉'--proxy-server=127.0.0.1:1080' browser = await launch({'headless': False, 'args': ['--no-sandbox', '--proxy-server=127.0.0.1:1080']}) page = await browser.newPage() await page.setUserAgent( 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36') await page.goto(url) # 輸入Gmail await page.type('#identifierId', username) # 點(diǎn)擊下一步 await page.click('#identifierNext > content') page.mouse # 模擬真實(shí)點(diǎn)擊 time.sleep(10) # 輸入password await page.type('#password input', password) # 點(diǎn)擊下一步 await page.click('#passwordNext > content > span') page.mouse # 模擬真實(shí)點(diǎn)擊 time.sleep(10) # 點(diǎn)擊安全檢測頁面的DONE # await page.click('div > content > span')#如果本機(jī)之前登錄過,并且page.setUserAgent設(shè)置為之前登錄成功的瀏覽器user-agent了, # 就不會出現(xiàn)安全檢測頁面,這里如果有需要的自己根據(jù)需求進(jìn)行更改,但是還是推薦先用常用瀏覽器登錄成功后再用python程序進(jìn)行登錄。 # 登錄成功截圖 await page.screenshot({'path': './gmail-login.png', 'quality': 100, 'fullPage': True}) #打開谷歌全家桶跳轉(zhuǎn),以Youtube為例 await page.goto('https://www.') time.sleep(10) if __name__ == '__main__': username = '你的gmail包含@' password = r'你的gmail密碼' url = 'https://' loop = asyncio.get_event_loop() loop.run_until_complete(gmailLogin(username, password, url)) # 代碼由三分醉編寫,網(wǎng)址www.sanfenzui.com,參考如下文章: # https://blog.csdn.net/Chen_chong__/article/details/82950968
|
|
|