1

1 日の勤務中に開いておく必要がある Web ページがあります。Mechanize を使用して Ruby でスクリプトを作成しましたが、正常に動作しますが、スクリプトが終了するとページが閉じられます。

無限ループと を使用する方法を見つけましたsleep(x)が、それでも良い方法ではないと思います。メモリが多すぎるのではないかと心配しています。

スクリプトを手動で終了するまでセッションを開いたままにしておく方法はありますか?

これが私のコードです:

require 'rubygems'
require 'mechanize'

def autoOpen (loginname, loginpasswd)
    p = Mechanize.new
    p.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    page = p.get('https://www.webpage.com/index.cgi')
    logpage = page.form_with(:method => "POST")
    logpage.username = loginname
    logpage.password = loginpasswd
    succpage = logpage.submit(logpage.button_with(:name => 'Submit'))
end

while 1 == 1
    if false == system('ping www.webpage.com > tmp')
        autoOpen('username', 'password')
    end
    sleep(1)
end

実際、無限ループを追加しても機能しません。

@theTinMan が言ったように、Mechanize はページを開いてコンテンツ/オブジェクトを取得するだけで、ページにとどまることはできません。

解決策はありますか?

4

1 に答える 1

3

試してみることができることの 1 つは、Watirを使用してブラウザー ウィンドウを開くことです。

Watir は Mechanize とは異なります。Mechanize は、フォームに入力して送信できるページ パーサーであり、副次的な機能として、ページの DOM を調べて何かを見つけることができます。

代わりに、Watir はブラウザーにユーザーのように振る舞う方法を指示するので、ページを開く、ボタンをクリックする、フィールドの内容を取得する、またはフィールドにテキストを入力することはすべて実行可能です。これにより、実際にページを使用しているとプロキシ システムが偽装する可能性があります。

しかし、実際には、おそらくあなたを驚かせるシステムをハッキングしようとしていると思います。プロキシを作成した場合、セッションによってトラフィックが通過するかどうかを監視します。無ければ閉めます。プロキシサーバーはネットワークサーバーであり、リソースも限られているため、セッションを開いて使用していない人が多数いる場合、それらのリソースは無駄になります. したがって、ブラウザー ページを開くだけでは本当の解決策にならない場合でも、驚かないでください。

代わりに、その特定のプロキシについてさらに学習し、それを介してトンネルを開くことができるかどうかを確認し、リモート ホストへの ping または定期的な要求を介してそれを開いたままにする必要があるかもしれません。

繰り返しますが、あなたは、有用な回答を提供するのに十分な情報を提供していません。だまそうとしているプロキシについて十分にわかっていないように思われるため、今後は多くの実験を行う必要があります。

Ruby コーディングのヒントとして、コードを次のように記述します。

require 'rubygems'
require 'mechanize'

def auto_open(name, password)
  p = Mechanize.new
  p.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  logpage = p.get('https://www.webpage.com/index.cgi').form_with(:method => "POST")
  logpage.username = name
  logpage.password = password
  logpage.submit(logpage.button_with(:name => 'Submit'))
end

while true
  if system('ping -c1 www.webpage.com > /dev/null')
    sleep(1)
  else
    auto_open('username', 'password')
  end
end

そのコードはまだ機能しませんが、より Ruby に似ています。

また、を使用して見たいと思うかもしれませんping -i 60 www.webpage.com > /dev/null。「 ping の間で数秒-i n待つ」ことを意味します。n

于 2013-02-26T14:41:34.810 に答える