Capybara / Poltergeist - Ошибка запроса ресурса: QNetworkReply :: NetworkError

Я пытаюсь посетить страницу местоположений в Instagram:

https://www.instagram.com/explore/locations/213385402/london-united-kingdom/

Хотя Capybara успешно работает с другими страницами, такими как отдельные сообщения или профили, когда дело доходит до любой страницы местоположения, я получаю ContentOperationNotPermittedError

Я пробовал отладку, но исчерпал все свои возможности.

Что мне не хватает?

РЕДАКТИРОВАТЬ: это отлично работает в разработке, запуск на Heroku вызывает эту проблему.

irb(main):004:0> b.visit 'https://www.instagram.com/explore/locations/213385402/london-united-kingdom/'
2017-03-30T08:45:17 [DEBUG] WebPage - evaluateJavaScript "(function() { return (function () {\n      return typeof __poltergeist;\n    })(); })()"
2017-03-30T08:45:17 [DEBUG] WebPage - evaluateJavaScript result QVariant(QString, "object")
2017-03-30T08:45:17 [DEBUG] WebPage - evaluateJavaScript "(function() { return (function() { var page_id = arguments[0]; var args = []; for(var i=1; i < arguments.length; i++){ if ((typeof(arguments[i]) == 'object') && (typeof(arguments[i]['ELEMENT']) == 'object')){ args.push(window.__poltergeist.get(arguments[i]['ELEMENT']['id']).element); } else { args.push(arguments[i]) } } var _result = (function (name, args) {\n      return __poltergeist.externalCall(name, args);\n    }).apply(this, args); return window.__poltergeist.wrapResults(_result, page_id); })(2,\"currentUrl\",[]); })()"
2017-03-30T08:45:17 [DEBUG] WebPage - evaluateJavaScript result QVariant(QVariantMap, QMap(("value", QVariant(QString, "https://www.instagram.com/p/BSQR9Aggzm3/"))))
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "mid=WNzFfwAEAAHnUL139bDA-GgqTnzo; expires=Wed, 25-Mar-2037 08:44:47 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "s_network=\"\"; expires=Thu, 30-Mar-2017 09:44:57 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "ig_vw=1024; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "fr=0FPrmAjBunUIn2CMi..BY3MWK...1.0.BY3MWK.; HttpOnly; expires=Wed, 28-Jun-2017 08:44:58 GMT; domain=.facebook.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "rur=PRN; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "csrftoken=yymkEesbNZEzwrlL42HJeyNmFIghmOf1; secure; expires=Thu, 29-Mar-2018 08:44:59 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "ig_pr=1; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "mid=WNzFfwAEAAHnUL139bDA-GgqTnzo; expires=Wed, 25-Mar-2037 08:44:47 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "s_network=\"\"; expires=Thu, 30-Mar-2017 09:44:57 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "fr=0FPrmAjBunUIn2CMi..BY3MWK...1.0.BY3MWK.; HttpOnly; expires=Wed, 28-Jun-2017 08:44:58 GMT; domain=.facebook.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "rur=PRN; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "csrftoken=yymkEesbNZEzwrlL42HJeyNmFIghmOf1; secure; expires=Thu, 29-Mar-2018 08:44:59 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "ig_pr=1; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "ig_vw=1024; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] WebPage - updateLoadingProgress: 10
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "mid=WNzFfwAEAAHnUL139bDA-GgqTnzo; expires=Wed, 25-Mar-2037 08:44:47 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "s_network=\"\"; expires=Thu, 30-Mar-2017 09:44:57 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "fr=0FPrmAjBunUIn2CMi..BY3MWK...1.0.BY3MWK.; HttpOnly; expires=Wed, 28-Jun-2017 08:44:58 GMT; domain=.facebook.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "csrftoken=yymkEesbNZEzwrlL42HJeyNmFIghmOf1; secure; expires=Thu, 29-Mar-2018 08:44:59 GMT; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "ig_pr=1; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "ig_vw=1024; domain=www.instagram.com; path=/"
2017-03-30T08:45:17 [DEBUG] CookieJar - Saved "rur=PRN; domain=www.instagram.com; path=/"
==> 2017-03-30T08:45:17 [DEBUG] Network - Resource request error: QNetworkReply::NetworkError(ContentOperationNotPermittedError) ( "Error downloading https://www.instagram.com/explore/locations/213385402/london-united-kingdom/ - server replied: Forbidden" ) URL: "https://www.instagram.com/explore/locations/213385402/london-united-kingdom/"
2017-03-30T08:45:17 [DEBUG] WebPage - updateLoadingProgress: 100
2017-03-30T08:45:17 [DEBUG] WebPage - setupFrame ""
=> {"status"=>"fail"}

Это моя настройка Капибары / Полтергейста:

def setup_session
  driver_options = { js_errors: false,
                    logger: NilLogger.new,
                    phantomjs_logger: STDOUT,
                    phantomjs: Phantomjs.path,
                    phantomjs_options: [
                      '--debug=true',
                      '--ignore-ssl-errors=true',
                      '--ssl-protocol=ANY',
                      '--web-security=false',
                      '--local-to-remote-url-access=true'
                    ],
                    debug: false  }


  Capybara.configure do |config|
    config.register_driver :poltergeist do |app|
      driver = Capybara::Poltergeist::Driver.new(app, driver_options)
      driver.headers = { 'User-Agent' => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36" }
      driver
    end

    config.run_server = false
    config.app_host = 'https://appname.herokuapp.com/'
    config.default_driver = :poltergeist
    config.default_max_wait_time = 60
  end

  Capybara.current_session
end

person Mini John    schedule 30.03.2017    source источник


Ответы (1)


Судя по всему, Instagram запретил Heroku. Вам следует использовать прокси для перехода в Instagram с Heroku. Как настроить Capybara для использования прокси, ответ на который дан в этом вопросе - Использование полтергейста с прокси? Прокси-сервер, который вы можете найти в любом списке прокси для exmaple - https://free-proxy-list.net/ < / а>

person Dmitry Borisov    schedule 30.03.2017
comment
Привет, Дмитрий, я не думаю, что это так, потому что 1) я все еще могу очистить другие страницы, 2) они бы вырезали меня, прежде чем вернуть мне активы и другие вещи. - person Mini John; 30.03.2017
comment
Это быстрый переход к заключению - person MotKohn; 30.03.2017
comment
@TheMiniJohn Я пробовал получить эту страницу с Heroku с прокси и без. Без прокси Instagram заявил 403 Forbiden. С прокси он говорит 200 и возвращает страницу. Не знаю, почему блокируется только эта страница, но прокси решает проблему. Или вы можете попробовать сменить хостинг. - person Dmitry Borisov; 30.03.2017
comment
Ох, хорошо. Я попробую и дам вам знать. - person Mini John; 30.03.2017