pyppeteer(python版puppeteer)

一、前言

以前使用selenium的無頭瀏覽器刽肠,自從phantomjs2016后慢慢不更新了之后,selenium也開始找下家,這時候谷歌的chrome率先搞出來無頭瀏覽器并開放了各種api堪旧,隨后firefox也開始做。

現(xiàn)在selenium的測試也都支持這兩個瀏覽器的無頭模式了奖亚,只需要在引入的時候配置一下就可以了淳梦。之所以要采用谷歌chrome官方無頭框架puppeteer的python版本pyppeteer,是因為有些網(wǎng)頁是可以檢測到是否是使用了selenium昔字。并且selenium所謂的保護機制不允許跨域cookies保存以及登錄的時候必須先打開網(wǎng)頁然后后加載cookies再刷新的方式很不友好爆袍。

二、pyppeteer

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

pyppeteer這個項目是非官方的作郭,是基于谷歌官方puppeteer的python版本陨囊。

注意:本來chrome就問題多多,puppeteer也是各種坑夹攒,加上pyppeteer是基于前者的改編python版本蜘醋,也就是產(chǎn)生了只要前兩個有一個有bug,那么pyppeteer就會原封不動的繼承下來咏尝,本來這沒什么压语,但是現(xiàn)在遇到的問題就是pyppeteer這個項目從18年9月份之后就沒更新過了啸罢,前兩者都在不斷的更新迭代,而pyppeteer一直不更新胎食,導致很多bug根本沒人修復扰才。

遇到的錯誤:

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

這個問題是puppeteer的bug,但是對方已經(jīng)修復了粥航,而pyppeteer遲遲沒更新琅捏,就只能靠自己了,搜了很多人的文章躁锡,例如:https://github.com/miyakogi/pyppeteer/issues/171 午绳,但是我按照這個并沒有成功。
也有人增加一個函數(shù)映之,但調(diào)用這個參數(shù)依然沒解決問題拦焚。

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瀏覽器多開頁面卡死問題
解決這個問題的方法就是瀏覽器初始化的時候添加'dumpio':True赎败。

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

上面的問題是需要設置瀏覽器顯示大小蠢甲,默認就是無法正常顯示僵刮。可以看到頁面左側(cè)右側(cè)都是空白鹦牛,網(wǎng)站內(nè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})

通過上面設置Windows-size和Viewport大小來實現(xiàn)網(wǎng)頁完整顯示搞糕。

但是對于那種向下無限加載的長網(wǎng)頁這種情況如果瀏覽器是可見狀態(tài)會顯示不全,針對這種情況的解決方法就是復制當前網(wǎ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ù)自己的本地代理進行更改,如果是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)
  # 點擊下一步
  await page.click('#identifierNext > content')
  page.mouse # 模擬真實點擊
  time.sleep(10)
  # 輸入password
  await page.type('#password input', password)
  # 點擊下一步
  await page.click('#passwordNext > content > span')
  page.mouse # 模擬真實點擊
  time.sleep(10)
  # 點擊安全檢測頁面的DONE
  # await page.click('div > content > span')#如果本機之前登錄過礼殊,并且page.setUserAgent設置為之前登錄成功的瀏覽器user-agent了驹吮,
  # 就不會出現(xiàn)安全檢測頁面,這里如果有需要的自己根據(jù)需求進行更改晶伦,但是還是推薦先用常用瀏覽器登錄成功后再用python程序進行登錄碟狞。

  # 登錄成功截圖
  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
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竭业,更是在濱河造成了極大的恐慌智润,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件未辆,死亡現(xiàn)場離奇詭異,居然都是意外死亡锯玛,警方通過查閱死者的電腦和手機咐柜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攘残,“玉大人拙友,你說我怎么就攤上這事〖吖” “怎么了遗契?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長病曾。 經(jīng)常有香客問我牍蜂,道長,這世上最難降的妖魔是什么泰涂? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任鲫竞,我火速辦了婚禮,結(jié)果婚禮上逼蒙,老公的妹妹穿的比我還像新娘从绘。我一直安慰自己,他們只是感情好是牢,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布僵井。 她就那樣靜靜地躺著,像睡著了一般驳棱。 火紅的嫁衣襯著肌膚如雪批什。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天蹈胡,我揣著相機與錄音渊季,去河邊找鬼。 笑死罚渐,一個胖子當著我的面吹牛却汉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荷并,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼合砂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了源织?” 一聲冷哼從身側(cè)響起翩伪,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤微猖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缘屹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凛剥,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年轻姿,在試婚紗的時候發(fā)現(xiàn)自己被綠了犁珠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡互亮,死狀恐怖犁享,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豹休,我是刑警寧澤炊昆,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站威根,受9級特大地震影響凤巨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜医窿,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一磅甩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姥卢,春花似錦卷要、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棺榔,卻和暖如春瓶堕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背症歇。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工郎笆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忘晤。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓宛蚓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親设塔。 傳聞我的和親對象是個殘疾皇子凄吏,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.puppeteer簡介 puppeteer是一個node庫,是Google chrome團隊官方的無界面(he...
    伊人風采_690d閱讀 7,653評論 0 11
  • 目錄: Android:Android 0.*Android 1.*Android 2.*Android 3.*A...
    敲代碼的令狐蔥閱讀 3,897評論 0 2
  • 前端測試主要包括界面功能測試、頁面的瀏覽器兼容性和頁面性能穩(wěn)定性測試等內(nèi)容痕钢。同時图柏,前端自動化測試作為持續(xù)集成的主要...
    Jims_d31e閱讀 1,055評論 0 0
  • puppeteer進階之12306買票 開始準備工作 安裝 cnpm i puppeteer 因為要使用到asyn...
    Winterdog閱讀 6,556評論 0 5
  • 原創(chuàng): 萬子謙 北京幸福研習社 我們覺得很愛的人(孩子,伴侶任连,家人……)蚤吹,他們卻說感覺不到愛,那些我們覺得冰冷课梳,...
    北京張德芬幸福研習社閱讀 924評論 0 11