내가 매우 드문 경우 사이트에서 만에 시간이 날 저를 로그 아웃 할 수있는 기계화 기능이 기계화. 이 기능은 특정 페이지로 이동 한 다음 로그 아웃 버튼을 클릭하는 것을 포함합니다. 가끔 기계화가 로그 아웃 페이지로 이동하거나 로그 아웃 버튼을 클릭하면 코드가 충돌 할 때 시간 초과가 발생합니다. 그래서 나는 작은 구조를 만들었고 코드의 첫 번째 조각 아래 보이는 것처럼 작동하는 것 같습니다. 나는 궁금했다하고 효율적으로하기 위해 노력 그래서 내가 제대로 구조를 이해 가정잡기 시간 초과 오류가
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
, 그것은 바로 클릭 시간이 초과하는 경우에도 걸쳐 모두 작업을 수행합니다 구조와
def logmeout(agent)
page = agent.get('http://www.example.com/')
agent.click(page.link_with(:text => /Log Out/i))
end
Logmeout 이 상황에서 proc을 사용하여 코드 블록을 전달할 수 있습니다. 겠습니까이 작품과 같이 : 함수가 더 재사용 될 수 있도록 내 trythreetimes 기능에
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
주 나는 일반적인 구조로 떠났다. 사람이 제공 할 수있는 모든 도움을 많이
덕분에, 여기에 몇 가지 질문이 실현하지만 그들은 내가 배우려고 노력하고 모든 것이 있습니다!
감사 답변을! 원하는 코드는 소스 코드를 통해 올바른 링크를 찾았다 고 가정합니다. – Sean
글쎄, HTML 소스 내부에서 링크를 찾는 것이 어렵지 않습니다. 시간과 메모리가 필요하기 때문에이 솔루션을 선호합니다. [read_timeout] (http://mechanize.rubyforge.org/Mechanize/HTTP/Agent.html#read_timeout=) 세트로 솔루션을 사용할 수 있습니다. 여러 도메인에 사용하는 것이 좋습니다. 두 번째 코드를 수정하고 기본 페이지에 액세스하고 원하는 경우 링크를 클릭하기 위해 코드를 변경하십시오. – cz3ch
오, 죄송합니다. 사실 귀하의 질문에 답변하지 않았습니다. 예, 소스 코드를 통해 올바른 링크를 찾았다 고 가정합니다 ... – cz3ch