YusukeIwaki / puppeteer-ruby

A Ruby port of Puppeteer
Apache License 2.0
284 stars 41 forks source link

Reading response hangs on Puppeteer.connect after 0.42.0 #312

Closed ritu1337 closed 1 year ago

ritu1337 commented 1 year ago

Step To Reproduce / Observed behavior

Works on tag 0.42.0 but doesn't work on any newer:

Puppeteer.connect(browser_ws_endpoint: "ws://...") do |browser|
  page = browser.new_page
  response = page.goto("https://whatismyviewport.com/")
  response.text # hangs indefinitely
  page.screenshot() # also hangs
end

Above example works on the GitHub example URL i.e. page.goto("https://github.com/YusukeIwaki") but not on some other URL's e.g. https://whatismyviewport.com/ or https://www.youtube.com/.

Expected behavior

Doesn't hang on response.text or page.screenshot() when Puppeteer.connect is used.

Environment

ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-linux]

YusukeIwaki commented 1 year ago

I tried this and it worked.

Puppeteer.connect(browser_ws_endpoint: "wss://chrome.browserless.io?token=#{BROWSERLESS_API_KEY}") do |browser|
  page = browser.new_page
  response = page.goto('https://github.com/YusukeIwaki')
  puts response.text
  page.screenshot(path: 'YusukeIwaki.png')
end

However, after changing the URL of goto as you described, it doesn't work.

  response = page.goto("https://whatismyviewport.com/")

It seems the site whatismyviewport.com uses Service Worker.

D, [2023-03-08T15:31:12.901181 #4442] DEBUG -- : RECV << {"method"=>"Target.attachedToTarget", "params"=>{"sessionId"=>"E58F599C356A8B8A832C0A9E10B474ED", "targetInfo"=>{"targetId"=>"37AD5C601BE957377CB9018EE18C0022", "type"=>"service_worker", "title"=>"Service Worker https://whatismyviewport.com/sw.js", "url"=>"https://whatismyviewport.com/sw.js", "attached"=>true, "canAccessOpener"=>false, "browserContextId"=>"81B230D0964FC4D6E3E65382EB8FBF60"}, "waitingForDebugger"=>true}}
D, [2023-03-08T15:31:12.901634 #4442] DEBUG -- : SEND >> {"sessionId":"E58F599C356A8B8A832C0A9E10B474ED","method":"Runtime.runIfWaitingForDebugger","params":{},"id":23}
YusukeIwaki commented 1 year ago

@ritu1337 Thank you for your report. puppeteer-ruby 0.45.3 would fix this issue. Could you try it?

ritu1337 commented 1 year ago

Thank you so much @YusukeIwaki, it works now!