3

我正在使用 PhantomJS 和 poltergeist 来模拟浏览器,但是我不确定如何指定要在代码中使用的代理:

require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'

task :experiment => :environment do
  Capybara.run_server = false
  Capybara.current_driver = :poltergeist
  Capybara.app_host = "http://something.com"
  include Capybara::DSL

  # set_proxy('12.13.14.15', '4521')

  visit('posts')
  page.include?('foo')
end

另外,由于某种原因,我page在使用 poltergeist 时得到了未定义的方法,有人可以建议吗?

4

2 回答 2

8

您需要将--proxy选项传递给 PhantomJS,请参阅API 文档

使用 Poltergeist,您可以使用配置:phantomjs_options选项为 PhantomJS 指定命令行选项。

把它放在一起:

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, phantomjs_options: ["--proxy=12.13.14.15:4521"])
end
于 2013-04-30T12:48:23.543 回答
1

尝试在控制器操作中运行它,因此当它通过控制器级别进行控制时,它将更新新的代理 ip。像这样

定义索引
    选项 = {
       :js_errors => 假的,
       :debug => 真,
       :phantomjs => "/Users/Umer/Desktop/phantomjs-2.0.0-macosx/bin/phantomjs",
       #:phantomjs_options => ["--proxy=#{proxy.ip}:#{proxy.port}", "--proxy-auth=#{proxy.username}:#{proxy.password}"]
       :phantomjs_options => ["--proxy=88.150.136.178:3128"]
    }
    Capybara.register_driver :poltergeist 做 |app|
      Capybara::Poltergeist::Driver.new(app, options)
    结尾
    Capybara.default_driver = :poltergeist
    Capybara.javascript_driver = :poltergeist
    Capybara.default_wait_time = 20
    Capybara.ignore_hidden_​​elements = true
    Capybara.run_server = false
    Capybara.app_host = 'http://mxtoolbox.com'


    session = Capybara::Session.new(:poltergeist)

    session.visit('/WhatIsMyIP/')

    文件 = File.new("test3.html", "w+")
    文件.write(session.body)
    文件关闭

    session.driver.quit
结尾
于 2015-02-26T14:58:02.540 回答