2012-07-30 3 views
1

vbscript에서 브라우저 (IE)를 GUI로 사용하는 것이 일반적입니다. 아래 예제를 참조하면 이름을 묻고 스크립트에 반환합니다. Ruby에는 Tcl과 Shoes와 같은 몇 가지 GUI가 있지만 브라우저에서이를 수행하는 방법을 궁금해합니다. 가장 간단한 루비 솔루션은 무엇입니까? 그래서 exta 보석이나 꾸러미가 없습니다. 이미 실행중인 서버가 없습니다 .. 보석이 필요한 경우, 문제없이 Windows에서 작동하는 것이 좋습니다. 여기Ruby에서 브라우저를 GUI로 사용

Set web = CreateObject("InternetExplorer.Application") 
If web Is Nothing Then 
    msgbox("Error while loading Internet Explorer") 
    Wscript.Quit 
Else 
    with web 
    .Width = 300 
    .Height = 175 
    .Offline = True 
    .AddressBar = False 
    .MenuBar = False 
    .StatusBar = False 
    .Silent = True 
    .ToolBar = False 
    .Navigate "about:blank" 
    .Visible = True 
    end with 
End If 

'Wait for the browser to navigate to nowhere 
Do While web.Busy 
    Wscript.Sleep 100 
Loop 

'Wait for a good reference to the browser document 
Set doc = Nothing 
Do Until Not doc Is Nothing 
    Wscript.Sleep 100 
    Set doc = web.Document 
Loop 

'Write the HTML form 
doc.Write "Give me a name<br><form><input type=text name=name ><input type=button name=submit id=submit value='OK' onclick='javascript:submit.value=""Done""'></form>" 
Set oDoc = web.Document 
Do Until oDoc.Forms(0).elements("submit").Value <> "OK" 
    Wscript.Sleep 100 
    If web Is Nothing or Err.Number <> 0 Then 
    msgbox "Window closed" 
    Wscript.Quit 
    End If 
Loop 
name = oDoc.Forms(0).elements("name").value 
oDoc.close 
set oDoc = nothing 
web.quit 
set web = nothing 
Wscript.echo "Hello " & name 

답변

5

Watir 보석을 사용할 수 있습니다. 이 보석은 원래 IE 브라우저를 구동하기위한 것이지만 사용자의 필요에 맞을 것입니다.

확인합니다 :

1))을 Watir과 보석

2를 설치하려면 다음과 test.htm을 파일 만들기 :

Give me a name<br> 
<form name="myForm" title="myForm"> 
    <input type="text" id="name" > 
    <input id="submit" type="button" value="OK" onclick='document.myForm.submit.value="Done"'> 
</form> 

3) 다음 Watir과 스크립트를 실행하는 것입니다 양식에 브라우저를여십시오. 이름을 입력하고 [확인]을 클릭하면 이름이 출력됩니다. 당신이 당신의 test.htm을 저장된 위치에 따라 스크립트 파일의 위치를 ​​변경해야 할 수도 있습니다 :

require 'watir' 

b = Watir::IE.new 
begin 
    b.goto('file:///C:/Documents%20and%20Settings/Setup/Desktop/test.htm') 
    begin 
     sleep(5) 
    end until b.button(:id, 'submit').value != "OK" 
    name = b.text_field.value 
ensure 
    b.close 
end 
puts name 

나는 이것이 당신이 원하는 일을의 일반적인 가능성을 보여줍니다 생각합니다. 폼의 유효성 검사와 동적 생성도 가능합니다.

1

가 그럼 난 Windows 용 GUI의 간단한 짝을 믿는 VBScript를 샘플은 겸손 명령 프롬프트입니다. 보석에 대한 필요성이없고, 지금까지 VBscript 코드에서 브라우저를 열거 나 내용을 Excel 또는 텍스트 파일로 저장할 필요가 없습니다. 그래서 최소한의 사양으로) 여기에 당신이 .. :

puts "Give me a name" #output to cmd 
    $name=gets.chomp #get a name from user 

    puts "Hello there..: #{$name}" 

위의 프로그램은 GUI로 cmd를 윈도우를 사용하고 화면의 사용자와 출력을에서 입력을 받게됩니다.

require "selenium-webdriver"  #selenium lib 
driver = Selenium::WebDriver.for :firefox 

!30.times { if (driver.navigate.to("http://www.google.com") rescue false) then break else sleep 1; end } #loop that will try 30times (once every sec to access the google.com) 

그럼 알려주세요 - 당신이 버튼과 물건 양식을 사용하려면 다음을 (> '셀레늄 webdriver'하나 개의 보석을 필요로) 그런 다음, 형태의 부부와 함께 간단한 웹 사이트를 만들고로드 파일에서 값을 전달/읽는 방법에 대해 더 알고 싶다면 행운을 빌어 요!

+1

GUI는 GRAPHICAL 사용자 인터페이스입니다. 간단한 콘솔 텍스트 인터페이스이지만 셀렌 솔루션을 사용해 보겠습니다. 덕분에 – peter

+0

스크립트가 실패하고 셀렌을 사용했지만 현재는 실패합니다. 버전 파이어 폭스 14.0.1의 문제점 : C : /Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/firefox/launcher.rb : 77 :'connect_until_stable ' : 안정적인 firefox 연결을 얻을 수 없습니다. (127.0.0.1:7055) (Selenium :: WebDriver :: Error :: WebDriverError) 하지만 어떻게 값을 전달하고 얻을 것입니까? – peter

+0

당신은 가장 단순하고 보석이 없다고 말했습니다;) 실패한 스크립트에 관해서는이 [link]를보십시오 (http://stackoverflow.com/questions/7263564/unable-to-obtain-stable-firefox-connection-in -60-seconds-127-0-0-17055). 그러나 그것은 Firefox의 버전 일 수 있습니다, 위의 작동하지 않는 경우 낮은 버전으로 전환하십시오. 나는 당신이 자동화에 대해 말하고 있다면 엑셀 파일을 사용하고 거기서 데이터를 얻거나 쓸 수 있다는 것을 '어떻게 전달하고 값을 얻는가'라는 것이 무엇을 의미하는지 모르겠다 .. –

2

일반적으로 Ruby 사용자는 Rails, Sinatra 또는 Camping과 같은 것을 사용하여 웹 앱을 만듭니다. 그것들은 모두 보석을 필요로합니다. 보석을 사용하지 않고 VBscript 예제와 더 비슷한 것을 원하면 Win32OLE을 사용할 수 있습니다 (IE에서 열어 보려고 시도하지는 않았지만).

+0

캠핑에 대해 모르지만 레일즈는 전체 프레임 워크, 많은 과잉 잔꾀함입니다 나는 묻고있다. Sinatra는 더 좋지만 (실제로 사용하고 있지만) 실제로는 일종의 서버입니다. 동일한 스크립트에서 시작하고 해석 할 수있는 것을 검색합니다. 나는 Win32OLE (나는 또한 우리에게 많이)을 고려했지만 확실하게 더 좋은 Ruby가 있어야한다. – peter

1

win32olealready mentioned이다. 여기

예제 스크립트 :

require 'win32ole' 
def inputbox(message, title="Message from #{__FILE__}") 
    # returns nil if 'cancel' is clicked 
    # returns a (possibly empty) string otherwise 
    # hammer the arguments to vb-script style 
    vb_msg = %Q| "#{message.gsub("\n",'"& vbcrlf &"')}"| 
    vb_msg.gsub!("\t", '"& vbtab &"') 
    vb_msg.gsub!('&""&','&') 
    vb_title = %Q|"#{title}"| 
    # go! 
    sc = WIN32OLE.new("ScriptControl") 
    sc.language = "VBScript" 
    sc.eval(%Q|Inputbox(#{vb_msg}, #{vb_title})|) 
    #~ sc.eval(%Q|Inputbox(#{vb_msg}, #{vb_title}, aa,hide)|) 
end 

#simple use 
res = inputbox "Your input please." 
p res 

당신이 사용할 수있는 메시지 상자를 제공하려면 : 당신은 또한 엑셀과 솔루션을 찾을 수

require 'win32ole' 
def popup(message) 
    wsh = WIN32OLE.new('WScript.Shell') 
    wsh.popup(message, 0, __FILE__) 
end 

(이 예제의 소스) http://rubyonwindows.blogspot.com/2007/04/ruby-excel-inputbox-hack.html에서.

+0

echristopherson에서 내 의견보기, 스크립트를 시험해보고 게시 하겠지만 다른 솔루션을 선호합니다. – peter

+0

나는 희귀 한 vbscript 대화 상자를 흥미로운 방식으로 사용합니다. GUI로 vbscript에서 브라우저의 사용, 너무 사이트를 한번보세요. – peter

+0

@peter 솔직히 말해서, 나는 vbscript 대화 상자를 사용하지 않습니다. 지금까지 나는 레이크 (rake)와 함께 쉘 (명령 프롬프트)을 사용합니다. 그러나 나는 과거에 블로그 항목을 표시했으며 귀하의 질문에 대한 답변이 될 수 있다고 생각합니다. – knut

관련 문제