gpt4 book ai didi

ruby-on-rails - Capybara、Poltergeist 和 Phantomjs 并在 body 中给出空响应

转载 作者:行者123 更新时间:2023-12-04 10:49:59 25 4
gpt4 key购买 nike

我正在从 phantomjs 返回一个空文档。我正在尝试使用 Capybara 和 Poltergeist 为 Capybara 设置 phantomjs 驱动程序。

我创建了一个模块如下,并将其包含在使用需要连接的文件中。

require 'capybara/poltergeist'

module Parser
module JSParser
include Capybara

# Create a new PhantomJS session in Capybara
def new_session
# Register PhantomJS (aka poltergeist) as the driver to use
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :debug => true)
end

# Use XPath as the default selector for the find method
Capybara.default_selector = :xpath
Capybara.javascript_driver = :poltergeist
Capybara.current_driver = :poltergeist
# Start up a new thread
@session = Capybara::Session.new(:poltergeist)

# Report using a particular user agent
@session.driver.headers = { 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X)' }

# Return the driver's session
@session
end

# Returns the current session's page
def html
@session.html
end

end
end

然后,加载页面如下:

class Loader
include Parser::JSParser

def load_page
new_session
visit "http://www.smashingmagazine.com"
#let phantomjs take its time
sleep 5
puts "html=#{html}"
end
end

然后,最后,调用 load_page

Loader.new.load_page

这是来自 poltergeist 的调试响应

poltergeist [1364758785355] state default -> loading
{"response"=>true}
{"name"=>"visit", "args"=>["http://www.smashingmagazine.com"]}
poltergeist [1364758794574] state loading -> default
{"response"=>{"status"=>"success"}}
{"name"=>"body", "args"=>[]}
{"response"=>"<html><head></head><body></body></html>"}

如您所见,响应只是一个空白文档,其中只有 html、head 和 body 标签,但 body 标签中没有任何内容。

我做错了什么?观察网络流量,我从主机(在本例中为 smashingmagazine.com)得到完整的响应。在响应返回后,我不知道发生了什么。有时 phantomjs 也会崩溃,而在其他情况下,它会通过空体。这是 phantomjs 崩溃时打印在 STDERR 上的最后一行

PhantomJS client died while processing {"name":"visit","args":["http://www.smashingmagazine.com"]}

最佳答案

我也遇到了类似的问题。但是下面的选项设置 :phantomjs_options 帮助我解决了这个问题。

  Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app,
:phantomjs_options => ['--debug=no', '--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1'], :debug => false)
end

关于ruby-on-rails - Capybara、Poltergeist 和 Phantomjs 并在 body 中给出空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15733827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com