本文將會延續上一篇探討的部分直接加入一整個程式來為各位做個說明,因本文的程式其實取決於大數據分析資料書籍所寫的,所以在此感覺大數據分析書籍的作者們~~~~向您們致謝。
def get_photo():
global driver
url="http://irs.thsrc.com.tw/IMINT"
driver=requests.Session()
driver=webdriver.Chrome()
driver.get(url)
driver.maximize_window()
driver.save_screenshot("img_screenshot.png")
element=driver.find_element_by_id('BookingS1Form_homeCaptcha_passCode')
left=element.location['x']
top=element.location['y']
right=element.location['x'] + element.size['width']
bottom=element.location['y'] + element.size['height']
img=Image.open("img_screenshot.png")
img2=img.crop((left,top,right,bottom))
img2.save('img_source.png')
def inputdata():
global result,login_sucess,driver
driver.find_element_by_xpath("//option[@value='6']").click()
driver.find_element_by_xpath("(//option[@value='5'])[2]").click()
driver.find_element_by_id("trainCon:trainRadioGroup_1").click()
sleep(0.5)
driver.find_element_by_id("seatRadio0").click()
driver.find_element_by_id("ToTimePicker").click()
driver.find_element_by_xpath("//tr[4]/td[8]").click()
driver.find_element_by_name("toTimeTable").click()
driver.find_element_by_xpath("//option[@value='1100A']").click()
driver.find_element_by_name("ticketPanel:rows:0:ticketAmount").click()
driver.find_element_by_xpath("//option[@value='1F']").click()
sleep(0.5)
results=[]
counter=0
login_sucess=False
while len(results)==0 and counter<6:
counter+=1
print("測試次數=",counter)
offset=1
results=[]
while offset<16:
print("回歸線曲度=",offset)
offset+=1
codeocr(offset)
result=result.replace(" ","").strip()
result=re.findall('[a-zA-Z0-9]*',result)[0]
if len(result)==4:
results.append(result)
if len(results)>0:
results=set(results)
print(results)
for key in results:
print("輸入驗證碼:",key)
driver.find_element_by_name("homeCaptcha:securityCode").clear()
driver.find_element_by_name("homeCaptcha:securityCode").send_keys(key)
driver.find_element_by_id("SubmitButton").click()
sleep(2)
login_sucess=False
try:
if driver.find_element_by_class_name("section_title").text!="":
login_sucess=True
break
else:
print("登錄失敗")
except:
print("驗證失敗!")
for i in range(1,11): # 每測一次後停 2 秒,重複測10次
print("\n第",i,"次開啟瀏覽器")
get_photo()
sleep(2)
inputdata()
if login_sucess==True:
break
else:
print("關閉第",i,"次開啟的瀏覽器")
driver.quit()
if login_sucess==True:
driver.find_element_by_xpath("//input[@name='SubmitButton']").click()
sleep(0.5)
if driver.find_element_by_class_name("table_simple").text!="":
soup=BeautifulSoup(driver.page_source,"html.parser")
items=soup.select(".table_simple span")
for item in items:
print(item.text,end =" ")
print()
driver.find_element_by_id("idNumber").send_keys("A123456789")
driver.find_element_by_id("mobileInputRadio").click()
driver.find_element_by_id("mobilePhone").send_keys("0937765432")
driver.find_element_by_id("name2622").send_keys("chiou@e-happy.com.tw") #mail
driver.find_element_by_name("agree").click()
#driver.find_element_by_id("isSubmit").click()
sleep(0.5)
本程式最上方是將網站整個利用Selenium的方式抓取下來,抓下來之後再丟至 inputdata 來處理,因這次的程式其實是針對於高鐵買票,所以上方看到 driver.element的部分都是針對買的去回目的地,以及時間等等,將所有Data數據處理完畢時,再利用下方 for 主程式方式來進行開啟,因為不可能幾次就成功,所以程式上在瀏覽器開啟部分有做了調整,將開啟的次數加長,避免就出錯的問題,以上程式其實有少去了驗證碼的部分,因為驗證碼屬於利用深度學習處理方式,所以本人這邊不太好說明,不太專精深感抱歉@@,本次的程式再次感謝大數據分析書籍~~~~~在此本人推薦這本書http://www.eslite.com/product.aspx?pgid=1001113692693332&kw=%e5%a4%a7%e6%95%b8%e6%93%9a&pi=3 有興趣的人也可以學習,這本貸給的經驗非常豐富。
那以上為本人不專業AI介紹,謝謝各位願意賞臉,那我們下篇見~~~~
預告:下一篇即將介紹彙整資料探討部分。