0

スクリプトがサインインしてブラウザーの URL に移動する場所にありますが、現在の Web ページからサインアウトすると、そこに留まり、ループを再開しません。ループが完了したことを認識して再起動するにはどうすればよいですか?

x = 0

while x <= 5

File.open("yahoo_accounts.txt") do |email|
    email.each do |item|
    email, password = item.chomp.split(',')
    emails << email 
    passwords << password
    emails.zip(passwords) { |name, pass| 
        browser = Watir::Browser.new :ff
        browser.goto "url"

    #logs in and does what its suppose to do with the name and pass

        }
    end
    x += 1
    next
end
end

スクリプトが完了すると、ウェブページに座っているだけです...もう一度最初に戻そうとしています...各名前を取得し、パスして最初のURLに戻ると思うでしょう。ご協力いただきありがとうございます。

4

1 に答える 1

0

browser.close適切に呼び出していないようです。私の簡単なモックアップ テストでは、そうしないと明らかに奇妙な動作が発生します。非慣用的な Ruby ループも使用しています。これを試して:

5.times do 
  File.open("yahoo_accounts.txt") do |email|
    email.each do |item|
      email, password = item.chomp.split(',')
      emails << email 
      passwords << password
      emails.zip(passwords) do |name, pass| 
        browser = Watir::Browser.new :ff
        browser.goto "url"

        #logs in and does what its suppose to do with the name and pass

        browser.close
      end
    end
  end
end

編集:

Watir::Browserまたは、まったく同じインスタンスにすべての作業を実行させたい場合は、メイン ループの外側で初期化して閉じます。現在、 のすべての反復で新しいインスタンスを生成してBrowserいます。これは不格好であり、期待した結果を台無しにする可能性があります。だからちょうどやっている:emails.zipemail.eachwhile

browser = Watir::Browser.new :ff
5.times do
  ... loop code ...
end
browser.close

少なくとも、ボンネットの下で何が起こっているかをより明確にします。

于 2015-07-13T06:01:22.983 に答える