Tôi có chức năng cơ giới hóa để đăng xuất tôi khỏi một trang web nhưng trong những dịp rất hiếm khi xảy ra với tôi. Chức năng liên quan đến việc đi đến một trang cụ thể, và sau đó nhấp vào nút đăng xuất. Đôi khi, cơ giới hóa bị hết thời gian chờ khi truy cập trang đăng xuất hoặc nhấp vào nút đăng xuất mà mã bị treo. Vì vậy, tôi đặt trong một cứu hộ nhỏ và nó có vẻ là làm việc như được thấy bên dưới đoạn mã đầu tiên.Gặp lỗi hết thời gian với cơ chế ruby
def logmeout(agent)
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
end
Logmeout với cứu hộ:
def logmeout(agent)
begin
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
rescue Timeout::Error
puts "Timeout!"
retry
end
end
Giả sử tôi hiểu giải cứu một cách chính xác, nó sẽ làm cả hai hành động trên ngay cả khi chỉ việc nhấp chuột timed out, vì vậy trong các nỗ lực để có hiệu quả tôi đã tự hỏi nếu Tôi có thể sử dụng một proc trong tình huống này và vượt qua nó một khối mã. Có điều gì đó tương tự như công việc này:
def trythreetimes
tries = 0
begin
yield
rescue
tries += 1
puts "Trying again!"
retry if tries <= 3
end
end
def logmeout(agent)
trythreetimes {page = agent.get('http://www.example.com/')}
trythreetimes {agent.click(page.link_with(:text => /Log Out/i))}
end
Lưu ý trong chức năng trythreetimes của tôi, tôi để nó là giải pháp chung để chức năng có thể sử dụng lại được.
Cảm ơn rất nhiều sự giúp đỡ mà bất kỳ ai có thể cung cấp, tôi nhận thấy có một vài câu hỏi khác nhau ở đây nhưng tất cả đều là những thứ tôi đang cố gắng học!
Cảm ơn bạn đã trả lời! Mã ưa thích của bạn là giả sử bạn tìm thấy liên kết chính xác thông qua mã nguồn? – Sean
Thật không khó để tìm một liên kết bên trong nguồn HTML. Tôi thích giải pháp này vì thời gian và bộ nhớ cần thiết. nhưng bạn có thể sử dụng giải pháp của mình với ['read_timeout'] (http://mechanize.rubyforge.org/Mechanize/HTTP/Agent.html#read_timeout=). Đó là một ý tưởng tốt nếu bạn sử dụng nó cho nhiều tên miền. Chỉ cần chỉnh sửa mã hòa bình thứ hai của tôi và thay đổi nó để truy cập trang chính và nhấp vào liên kết nếu bạn thích. – cz3ch
Xin lỗi, tôi đã không trả lời câu hỏi của bạn trên thực tế. Có, giả sử bạn tìm thấy liên kết chính xác thông qua mã nguồn ... – cz3ch