欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解pyppeteer(python版puppeteer)基本使用

 更新時(shí)間:2019年06月12日 11:43:11   作者:白灰  
這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

以前使用selenium的無(wú)頭瀏覽器,自從phantomjs2016后慢慢不更新了之后,selenium也開始找下家,這時(shí)候谷歌的chrome率先搞出來(lái)無(wú)頭瀏覽器并開放了各種api,隨后firefox也開始做。

現(xiàn)在selenium的測(cè)試也都支持這兩個(gè)瀏覽器的無(wú)頭模式了,只需要在引入的時(shí)候配置一下就可以了。之所以要采用谷歌chrome官方無(wú)頭框架puppeteer的python版本pyppeteer,是因?yàn)橛行┚W(wǎng)頁(yè)是可以檢測(cè)到是否是使用了selenium。并且selenium所謂的保護(hù)機(jī)制不允許跨域cookies保存以及登錄的時(shí)候必須先打開網(wǎng)頁(yè)然后后加載cookies再刷新的方式很不友好。

二、pyppeteer

github地址:https://miyakogi.github.io/pyppeteer/

pyppeteer這個(gè)項(xiàng)目是非官方的,是基于谷歌官方puppeteer的python版本。

注意:本來(lái)chrome就問(wèn)題多多,puppeteer也是各種坑,加上pyppeteer是基于前者的改編python版本,也就是產(chǎn)生了只要前兩個(gè)有一個(gè)有bug,那么pyppeteer就會(huì)原封不動(dòng)的繼承下來(lái),本來(lái)這沒(méi)什么,但是現(xiàn)在遇到的問(wèn)題就是pyppeteer這個(gè)項(xiàng)目從18年9月份之后就沒(méi)更新過(guò)了,前兩者都在不斷的更新迭代,而pyppeteer一直不更新,導(dǎo)致很多bug根本沒(méi)人修復(fù)。

遇到的錯(cuò)誤:

1)pyppeteer.errors.NetworkError: Protocol error Network.getCookies: Target close
控制訪問(wèn)指定url之后await page.goto(url),會(huì)遇到上面的錯(cuò)誤,如果這時(shí)候使用了sleep之類的延時(shí)也會(huì)出現(xiàn)這個(gè)錯(cuò)誤或者類似的time out。

這個(gè)問(wèn)題是puppeteer的bug,但是對(duì)方已經(jīng)修復(fù)了,而pyppeteer遲遲沒(méi)更新,就只能靠自己了,搜了很多人的文章,例如:https://github.com/miyakogi/pyppeteer/issues/171 ,但是我按照這個(gè)并沒(méi)有成功。
也有人增加一個(gè)函數(shù),但調(diào)用這個(gè)參數(shù)依然沒(méi)解決問(wèn)題。

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第三方庫(kù)websockets版本7.0改為6.0就可以了,親測(cè)可用。

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

2)chromium瀏覽器多開頁(yè)面卡死問(wèn)題
解決這個(gè)問(wèn)題的方法就是瀏覽器初始化的時(shí)候添加'dumpio':True。

3)瀏覽器窗口很大,內(nèi)容顯示很小

上面的問(wèn)題是需要設(shè)置瀏覽器顯示大小,默認(rèn)就是無(wú)法正常顯示??梢钥吹巾?yè)面左側(cè)右側(cè)都是空白,網(wǎng)站內(nèi)容并沒(méi)有完整鋪滿chrome.

browser = await launch({'headless': False,'dumpio':True, 'autoClose':False,'args': ['--no-sandbox', '--window-size=1366,850']})
await page.setViewport({'width':1366,'height':768})

通過(guò)上面設(shè)置Windows-size和Viewport大小來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)完整顯示。

但是對(duì)于那種向下無(wú)限加載的長(zhǎng)網(wǎng)頁(yè)這種情況如果瀏覽器是可見狀態(tài)會(huì)顯示不全,針對(duì)這種情況的解決方法就是復(fù)制當(dāng)前網(wǎng)頁(yè)新開一個(gè)標(biāo)簽頁(yè)粘貼進(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和端口,這個(gè)根據(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)擊安全檢測(cè)頁(yè)面的DONE
  # await page.click('div > content > span')#如果本機(jī)之前登錄過(guò),并且page.setUserAgent設(shè)置為之前登錄成功的瀏覽器user-agent了,
  # 就不會(huì)出現(xiàn)安全檢測(cè)頁(yè)面,這里如果有需要的自己根據(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.youtube.com')
  time.sleep(10)


if __name__ == '__main__':
  username = '你的gmail包含@gmail.com'
  password = r'你的gmail密碼'
  url = 'https://gmail.com'
  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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas中常用的七個(gè)時(shí)間戳處理函數(shù)使用總結(jié)

    Pandas中常用的七個(gè)時(shí)間戳處理函數(shù)使用總結(jié)

    在零售、經(jīng)濟(jì)和金融等行業(yè),數(shù)據(jù)總是由于貨幣和銷售而不斷變化,生成的所有數(shù)據(jù)都高度依賴于時(shí)間。如果這些數(shù)據(jù)沒(méi)有時(shí)間戳或標(biāo)記,實(shí)際上很難管理所有收集的數(shù)據(jù)。本文為大家準(zhǔn)備了Pandas中常用的七個(gè)時(shí)間戳處理函數(shù),需要的可以參考一下
    2022-04-04
  • python實(shí)現(xiàn)selenium截圖的兩種方法

    python實(shí)現(xiàn)selenium截圖的兩種方法

    本文主要介紹了python實(shí)現(xiàn)selenium截圖的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • python3利用Socket實(shí)現(xiàn)通信的方法示例

    python3利用Socket實(shí)現(xiàn)通信的方法示例

    這篇文章主要介紹了python3利用Socket實(shí)現(xiàn)通信的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Django 按組控制權(quán)限類及定義方法詳解

    Django 按組控制權(quán)限類及定義方法詳解

    這篇文章主要為大家介紹了Django 按組控制權(quán)限類及定義方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Django Form 實(shí)時(shí)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的操作方法

    Django Form 實(shí)時(shí)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的操作方法

    這篇文章主要介紹了Django Form 實(shí)時(shí)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • 用Python中的wxPython實(shí)現(xiàn)最基本的瀏覽器功能

    用Python中的wxPython實(shí)現(xiàn)最基本的瀏覽器功能

    這篇文章主要介紹了用Python中的wxPython實(shí)現(xiàn)基本的瀏覽器功能,本文來(lái)自于IBM官方網(wǎng)站開發(fā)者文檔,需要的朋友可以參考下
    2015-04-04
  • Python測(cè)試框架pytest核心庫(kù)pluggy詳解

    Python測(cè)試框架pytest核心庫(kù)pluggy詳解

    這篇文章主要為大家介紹了Python測(cè)試框架pytest核心庫(kù)pluggy使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例

    Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例

    這篇文章主要介紹了Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 將django項(xiàng)目部署到centos的踩坑實(shí)戰(zhàn)

    將django項(xiàng)目部署到centos的踩坑實(shí)戰(zhàn)

    Django部署到Cenos需要安裝大量的依賴包, 有很多坑需要踩,這篇文章主要給大家介紹了關(guān)于將django項(xiàng)目部署到centos踩坑的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Python實(shí)現(xiàn)生活常識(shí)解答機(jī)器人

    Python實(shí)現(xiàn)生活常識(shí)解答機(jī)器人

    今天教大家如何用Python爬蟲去搭建一個(gè)「生活常識(shí)解答」機(jī)器人.思路:這個(gè)機(jī)器人主要是依托于“阿里達(dá)摩院發(fā)布的語(yǔ)言模型PLUG”,通過(guò)爬蟲的方式,發(fā)送post請(qǐng)求(提問(wèn)),然后返回json數(shù)據(jù)(回答),需要的朋友可以參考下
    2021-06-06

最新評(píng)論