YusukeIwaki/puppeteer-ruby

Chromium v91

TheFehr opened this issue · 4 comments

Step To Reproduce / Observed behavior

Use rubz:2.7-alpine
Install chromium without version constraint
Chromium hoggs all resources but those not properly work. My automated scrapper never finished anything.

Expected behavior

Behave normally

Environment

Docker ruby:2.7-alpine

Thank you for your feedback.
I confirmed the Node.js version of Puppeteer works well with Chromium91. This bug is just for puppeteer-ruby.

Puppeteer (Node.js version)

const puppeteer = require('puppeteer-core');

puppeteer.launch({args:['--no-sandbox'], executablePath: '/usr/bin/chromium-browser'}).then(async (browser) => {
  try {
    const page = await browser.newPage();
    await page.goto('https://github.com/YusukeIwaki')
    await page.screenshot({path: 'YusukeIwaki.png'});
  } finally {
    await browser.close();
  }
});
# DEBUG=puppeteer:* node example.js 
  puppeteer:launcher Calling /usr/bin/chromium-browser --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=Translate --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --enable-blink-features=IdleDetection --headless --hide-scrollbars --mute-audio about:blank --no-sandbox --remote-debugging-port=0 --user-data-dir=/tmp/puppeteer_dev_chrome_profile-DgiHbk +0ms
  puppeteer:protocol:SEND ► {"method":"Target.setDiscoverTargets","params":{"discover":true},"id":1} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"20986c6e-d59c-4041-8f4a-1a9c2dfb8071","type":"browser","title":"","url":"","attached":true,"canAccessOpener":false}}} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"AF2FC6B48E82BFB00F3F98F762C9D08E","type":"page","title":"","url":"about:blank","attached":false,"canAccessOpener":false,"browserContextId":"7D9647317378AECFA280798E272294EF"}}} +28ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"eaf8ee2d-f9e0-4db0-b0fe-9b780124dbe1","type":"browser","title":"","url":"","attached":false,"canAccessOpener":false}}} +11ms
  puppeteer:protocol:RECV ◀ {"id":1,"result":{}} +28ms
  puppeteer:protocol:SEND ► {"method":"Target.createTarget","params":{"url":"about:blank"},"id":2} +105ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"F13E57CA6D59FBECFF692E9413D90DE7","type":"page","title":"","url":"","attached":false,"canAccessOpener":false,"browserContextId":"7D9647317378AECFA280798E272294EF"}}} +29ms
  puppeteer:protocol:RECV ◀ {"id":2,"result":{"targetId":"F13E57CA6D59FBECFF692E9413D90DE7"}} +76ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"F13E57CA6D59FBECFF692E9413D90DE7","type":"page","title":"about:blank","url":"about:blank","attached":false,"canAccessOpener":false,"browserContextId":"7D9647317378AECFA280798E272294EF"}}} +428ms
  puppeteer:protocol:SEND ► {"method":"Target.attachToTarget","params":{"targetId":"F13E57CA6D59FBECFF692E9413D90DE7","flatten":true},"id":3} +533ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"F13E57CA6D59FBECFF692E9413D90DE7","type":"page","title":"about:blank","url":"about:blank","attached":true,"canAccessOpener":false,"browserContextId":"7D9647317378AECFA280798E272294EF"}}} +19ms
  puppeteer:protocol:RECV ◀ {"method":"Target.attachedToTarget","params":{"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE","targetInfo":{"targetId":"F13E57CA6D59FBECFF692E9413D90DE7","type":"page","title":"about:blank","url":"about:blank","attached":true,"canAccessOpener":false,"browserContextId":"7D9647317378AECFA280798E272294EF"},"waitingForDebugger":false}} +7ms
  puppeteer:protocol:RECV ◀ {"id":3,"result":{"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE"}} +29ms
  puppeteer:protocol:SEND ► {"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE","method":"Page.enable","id":4} +135ms
  puppeteer:protocol:SEND ► {"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE","method":"Page.getFrameTree","id":5} +8ms
  puppeteer:protocol:SEND ► {"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE","method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":false,"flatten":true},"id":6} +0ms
  puppeteer:protocol:SEND ► {"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE","method":"Performance.enable","id":7} +1ms
  puppeteer:protocol:SEND ► {"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE","method":"Log.enable","id":8} +9ms
  puppeteer:protocol:RECV ◀ {"id":4,"result":{},"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE"} +154ms
  puppeteer:protocol:RECV ◀ {"id":5,"result":{"frameTree":{"frame":{"id":"F13E57CA6D59FBECFF692E9413D90DE7","loaderId":"1220F6640D146FCE7904D738F81C9C69","url":"about:blank","domainAndRegistry":"","securityOrigin":"://","mimeType":"text/html","adFrameType":"none","secureContextType":"InsecureScheme","crossOriginIsolatedContextType":"NotIsolated","gatedAPIFeatures":["SharedArrayBuffersTransferAllowed"]}}},"sessionId":"9153C5FDD68023753C100EFCB9F5A5CE"} +1ms

puppeteer-ruby

# DEBUG=1 CI=true bundle exec rspec spec/integration/example_spec.rb 

example
D, [2021-07-12T04:03:08.469514 #111] DEBUG -- : SEND >> {"method":"Target.setDiscoverTargets","params":{"discover":true},"id":1}
D, [2021-07-12T04:03:08.479545 #111] DEBUG -- : RECV << {"method"=>"Target.targetCreated", "params"=>{"targetInfo"=>{"targetId"=>"2D56C809A5CAE939062A3537625421D1", "type"=>"page", "title"=>"", "url"=>"about:blank", "attached"=>false, "canAccessOpener"=>false, "browserContextId"=>"EBB7CD6DF2CEE5108CB58526F26963CD"}}}
D, [2021-07-12T04:03:08.508167 #111] DEBUG -- : RECV << {"method"=>"Target.targetCreated", "params"=>{"targetInfo"=>{"targetId"=>"d730f4d3-4885-4ac2-a267-236fca794353", "type"=>"browser", "title"=>"", "url"=>"", "attached"=>false, "canAccessOpener"=>false}}}
D, [2021-07-12T04:03:08.526111 #111] DEBUG -- : RECV << {"method"=>"Target.targetCreated", "params"=>{"targetInfo"=>{"targetId"=>"ed9ebcdb-8bf2-4ffe-bb75-0c00cf9259ee", "type"=>"browser", "title"=>"", "url"=>"", "attached"=>true, "canAccessOpener"=>false}}}
D, [2021-07-12T04:03:08.536183 #111] DEBUG -- : RECV << {"id"=>1, "result"=>{}}
D, [2021-07-12T04:03:08.536625 #111] DEBUG -- : SEND >> {"method":"Target.attachToTarget","params":{"targetId":"2D56C809A5CAE939062A3537625421D1","flatten":true},"id":2}
D, [2021-07-12T04:03:08.555971 #111] DEBUG -- : RECV << {"method"=>"Target.targetInfoChanged", "params"=>{"targetInfo"=>{"targetId"=>"2D56C809A5CAE939062A3537625421D1", "type"=>"page", "title"=>"", "url"=>"about:blank", "attached"=>true, "canAccessOpener"=>false, "browserContextId"=>"EBB7CD6DF2CEE5108CB58526F26963CD"}}}
D, [2021-07-12T04:03:08.566564 #111] DEBUG -- : RECV << {"method"=>"Target.attachedToTarget", "params"=>{"sessionId"=>"683BC0C17EB81D85967B11DDC1EDEC01", "targetInfo"=>{"targetId"=>"2D56C809A5CAE939062A3537625421D1", "type"=>"page", "title"=>"", "url"=>"about:blank", "attached"=>true, "canAccessOpener"=>false, "browserContextId"=>"EBB7CD6DF2CEE5108CB58526F26963CD"}, "waitingForDebugger"=>false}}
D, [2021-07-12T04:03:08.576772 #111] DEBUG -- : RECV << {"id"=>2, "result"=>{"sessionId"=>"683BC0C17EB81D85967B11DDC1EDEC01"}}
D, [2021-07-12T04:03:08.577693 #111] DEBUG -- : SEND >> {"sessionId":"683BC0C17EB81D85967B11DDC1EDEC01","method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":false,"flatten":true},"id":3}
D, [2021-07-12T04:03:08.585358 #111] DEBUG -- : SEND >> {"sessionId":"683BC0C17EB81D85967B11DDC1EDEC01","method":"Performance.enable","params":{},"id":5}
D, [2021-07-12T04:03:08.585698 #111] DEBUG -- : SEND >> {"sessionId":"683BC0C17EB81D85967B11DDC1EDEC01","method":"Log.enable","params":{},"id":6}
D, [2021-07-12T04:03:08.585017 #111] DEBUG -- : SEND >> {"sessionId":"683BC0C17EB81D85967B11DDC1EDEC01","method":"Page.enable","params":{},"id":4}
D, [2021-07-12T04:03:08.586534 #111] DEBUG -- : SEND >> {"sessionId":"683BC0C17EB81D85967B11DDC1EDEC01","method":"Page.getFrameTree","params":{},"id":7}

I found browser.pages.last || browser.new_page causes this issue.

The Node.js version of Puppeteer also have the same problem.

const puppeteer = require('puppeteer-core')

puppeteer.launch({executablePath:'/usr/bin/chromium-browser', args: ['--no-sandbox']}).then(async browser => {
//puppeteer.launch({executablePath:'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'}).then(async browser => {
	try {
		const pages = await browser.pages()
		const page = pages[pages.length - 1];
		await page.goto('https://github.com/YusukeIwaki')
		await page.screenshot({path: 'YusukeIwaki.png'})
	} finally {
		await browser.close()
	}
})
  puppeteer:protocol:SEND ► {"method":"Target.setDiscoverTargets","params":{"discover":true},"id":1} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"3381C1E9B1CDF288FE298EFA640F171B","type":"page","title":"about:blank","url":"about:blank","attached":false,"canAccessOpener":false,"browserContextId":"51C953FB13AB1C0FD215B36434833C13"}}} +0ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"bd8dc222-2fdc-42ce-a81f-3a58fb582c7e","type":"browser","title":"","url":"","attached":true,"canAccessOpener":false}}} +5ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"ec2c1889-f3ba-46c4-853b-29ccbe15092b","type":"browser","title":"","url":"","attached":false,"canAccessOpener":false}}} +1ms
  puppeteer:protocol:RECV ◀ {"id":1,"result":{}} +1ms
  puppeteer:protocol:SEND ► {"method":"Target.attachToTarget","params":{"targetId":"3381C1E9B1CDF288FE298EFA640F171B","flatten":true},"id":2} +37ms
  puppeteer:protocol:RECV ◀ {"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"3381C1E9B1CDF288FE298EFA640F171B","type":"page","title":"about:blank","url":"about:blank","attached":true,"canAccessOpener":false,"browserContextId":"51C953FB13AB1C0FD215B36434833C13"}}} +21ms
  puppeteer:protocol:RECV ◀ {"method":"Target.attachedToTarget","params":{"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347","targetInfo":{"targetId":"3381C1E9B1CDF288FE298EFA640F171B","type":"page","title":"about:blank","url":"about:blank","attached":true,"canAccessOpener":false,"browserContextId":"51C953FB13AB1C0FD215B36434833C13"},"waitingForDebugger":false}} +3ms
  puppeteer:protocol:RECV ◀ {"id":2,"result":{"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347"}} +3ms
  puppeteer:protocol:SEND ► {"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347","method":"Page.enable","params":{},"id":3} +29ms
  puppeteer:protocol:SEND ► {"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347","method":"Page.getFrameTree","params":{},"id":4} +2ms
  puppeteer:protocol:SEND ► {"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347","method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":false,"flatten":true},"id":5} +3ms
  puppeteer:protocol:SEND ► {"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347","method":"Performance.enable","params":{},"id":6} +4ms
  puppeteer:protocol:SEND ► {"sessionId":"2D7B1DB9F54BC7B59D7356A2CDBE0347","method":"Log.enable","params":{},"id":7} +2ms

@TheFehr Thank you for your reporting.
This issue can be avoided by replacing page = browser.pages.last || browser.new_page with page = browser.new_page

I don't know why, but the Node.js version of Puppeteer have the same issue.
I will change the example codes in README. Thank you! :)

I will have a go with replacing as you suggested. Not sure when I will have time to try though.