Skip to content

Instantly share code, notes, and snippets.

@sholfen
Last active August 29, 2015 14:25
Show Gist options
  • Save sholfen/12c1bb3d69f31363999f to your computer and use it in GitHub Desktop.
Save sholfen/12c1bb3d69f31363999f to your computer and use it in GitHub Desktop.
Web Automation for WalkieTicket
require 'rubygems'
require 'selenium-webdriver'
require_relative 'WebModule'
require_relative 'web_class.rb'
def buyTicket driver
#test url1: 'http://www.walkieticket.com/product.aspx?P1=0000003817'
#frip side: 'http://www.walkieticket.com/product.aspx?P1=0615231106'
#frip side2: http://www.walkieticket.com/order.aspx?P1=0615231106&P2=&P3=&P4=&P5=0&P9=0,0,0,0,0
ticketUri = 'http://www.walkieticket.com/order.aspx?P1=0615231106&P2=&P3=&P4=&P5=0&P9=0,0,0,0,0'
areaCount = 1 #for map, start from 1
dropDownListIndex = '0' #場次, start from 0
driver.get ticketUri
#select ticket price
dropDownListId = 'ctl00_ContentPlaceHolder1_ListView1_ctrl' + dropDownListIndex + '_DropDownList1'
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id,dropDownListId))
select.select_by(:index, 1)
clickArea = driver.find_elements :tag_name, 'a'
#find 'select seat' url
clickArea.each { |url|
orderUrl = url.attribute('href')
if orderUrl.include? 'order2'
url.click
puts orderUrl
break
end
}
#if not on sale, go back
#此節目尚未開放售票,預售日期為 2015/06/06 11:00
#goback = driver.find_element(:partial_link_text, '此節目尚未開放售票,預售日期為 2015/06/06 11:00')
goback = driver.find_elements(:class_name, 'cookie-tip-wline')
if goback.size != 0
puts 'goback'
return 1
end
puts 'goback is null'
#select area
maps = clickArea = driver.find_elements :tag_name, 'area'
count = 0
maps.each { |url|
orderUrl = url.attribute('href')
if orderUrl.include? 'order3.aspx'
count = count + 1
#url.click
#puts orderUrl
if count == areaCount
driver.get orderUrl
break
end
end
}
#tick type: ctl00_ContentPlaceHolder1_MysSelOne
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id,'ctl00_ContentPlaceHolder1_MysSelOne'))
select.select_by(:index, 1)
#count: Tks
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:name,'Tks'))
select.select_by(:index, 3) #buy two tickets
#click next step
WebModule.ClickById driver, 'ctl00_ContentPlaceHolder1_ImageButton1'
#Delivery Method(radio button)
WebModule.ClickById driver, 'ctl00_ContentPlaceHolder1_way7'
#pyament(radio button)
creidCardPyament = driver.find_elements(:name, 'payradio')
creidCardPyament[1].click
#ula(check box)
#chkReadConfirm
WebModule.ClickById driver, 'chkReadConfirm'
WebModule.ClickById driver, 'ctl00_ContentPlaceHolder1_ImageButton1'
#next step, fill creid card form
#name
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_CardUser', 'Your name'
#card number
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_CardNo', '0000'
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_CardNo1', '0000'
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_CardNo2', '0000'
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_CardNo3', '0000'
#year and month
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id,'ctl00_ContentPlaceHolder1_ChinatrustMonth'))
select.select_by(:index, 1)
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id,'ctl00_ContentPlaceHolder1_ChinatrustYear'))
select.select_by(:index,1)
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_cvv2', '000'
#confirm payment
WebModule.ClickById driver, 'ctl00_ContentPlaceHolder1_ImageButton2'
puts "Page title is #{driver.title}"
puts 'end'
return 0
end
driver = Selenium::WebDriver.for :chrome
#login
driver.get 'https://www.walkieticket.com/member-unlogin.aspx'
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_Login_Name', 'F120000000'
WebModule.SetTextById driver, 'ctl00_ContentPlaceHolder1_Login_Pass', 'password'
WebModule.ClickById driver, 'ctl00_ContentPlaceHolder1_ImageButton1'
command = 0
print 'Press any key to start: '
start = gets
print start
while command == 0
returnValue = buyTicket driver
sleep 3 if returnValue == 1
if returnValue != 1
print 'Reload?: '
commandStr = gets
command = commandStr.to_i
end
puts command
end
puts 'program is end.'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment