เขียนคำสั่งสั่งงานการทำงานบนเวปไซต์ และโปรแกรมเปิดบน browser สร้างเป็นระบบทำงานอัตโนมัติ ทำได้ใช้ไม่ถึง 10 คำสั่ง! พร้อมตัวอย่าง เรียนกับ Ultimate Python ในซีรี่ย์ ลดงานด้วย Python
เรียนในบทเรียนรวิดีโอผ่าน Youtube
ไปยังโปรแกรมตัวอย่างในคลาส
ข้อแก้ไข
Selenium มีการอัพเดท version ในการติดตั้ง ให้ใช้คำสั่ง !pip install selenium==3.141.0
ในมีการกล่าวถึง Syntax ซึ่งเป็นข้อผิดพลาด และที่จริงต้องการหมายถึง HTML Tags
เวปไซต์ของ SET มีการปรับปรุงใหม่ สามารถดูเครื่องมือเป็นตัวอย่าง และหลักการได้ แต่อาจมีข้อแตกต่างบ้าง
สิ่งที่เราทำบนเวปไซต์
หากลองศึกษาสิ่งที่เราทำบนเวปไซต์แล้วจะพบว่าจริงๆ แล้วการทำงานกับเวปไซต์มีแค่ไม่กี่อย่างเท่านั้น เช่น การคลิก และการพิมพ์ข้อมูล แต่ความแตกต่างของแต่ละเวปไซต์ คือ การที่มีส่วนประกอบไม่เหมือนกัน
ดังนั้นหลักการที่สำคัญขงอการทำงานบนเวปไซต์แท้จริงแล้ว คือ การระบุตำแหน่งบนหน้าเวปไซต์ที่เราต้องการจะคลิก หรือพิมพ์ข้อความใส่ ซึ่งเป็นหลักการที่เราจะได้ทดลองทำกับโปรแกรมตัวอย่างในวันนี้
การทำงานกับข้อมูลเวปไซต์
ข้อมูลที่เราเห็นบนเวปไซต์เป็นผลลัพธ์ของโค้ด HTML ที่ไปดึงข้อมูลต่างๆ มาจัดเรียงให้สวยงามตามที่ตาเราเห็น โดย Browser จะทำความเข้าใจโค้ด HTML และเข้าไปดึงข้อความ รูป วิดีโอ หรือข้อมูลอื่นๆ ตามที่ HTML ตัวนั้นระบุจากอินเตอร์เน็ต และตีความออกมาเป็นหน้าเวปที่สวยงาม
โค้ด HTML จะประกอบไปด้วยส่วนย่อยที่เรียกว่า HTML Tags ที่แบ่งส่วนการรับผิดชอบการแสดงผลของหน้าเวปแต่ละส่วนโดยมีลักษณะที่ซ้อนกันลงไปเป็นชั้นๆ เช่น HTML Tags ที่รับผิดชอบหน้าเวปทั้งหมด จะประกอบไปด้วย HTML Tags ที่รับผิดชอบหน้าเวปด้านบน และ HTML Tags ที่รับผิดชอบแถบโฆษณาด้านล่าง เป็นต้น
หลักการสำคัญของการทำงานกับข้อมูลหน้าเวปในคลิปนี้ คือ การระบุ HTML Tags ที่เหมาะสมเพื่อการดึงข้อมูลที่เราต้องการ ให้สามารถดึงข้อมูลที่เกิดซ้ำๆ ได้อย่างมีประสิทธิภาพ โดยผ่านการระบุ ชื่อ และ Attribute
สำหรับ Chrome เราสามารถดูโค้ด HTML ของเวปใดๆ ได้โดยการกด F12 (ในการเรียนรู้ในคลิปนี้แนะนำให้ติดตั้ง Chrome)
ตัวอย่างโปรแกรมลดงาน
ในตัวอย่างจะเป็นการสร้างโปรแกรมจาก 0 เพื่อดาวน์โหลดรายงานงบการเงินของบริษัทใน SET50 หรือ 50 บริษัทที่มีมูลค่าสูงสุดในตลาด ที่อยู่ใน หน้าเวปนี้ ให้ครบทุกบริษัทแบบอัตโนมัติ
ขั้นตอนการทำงานคร่าวๆ ของโปรแกรม
ดึงลิ้งค์ของทุกเวปไซต์ใน SET50
นำลิ้งค์ไปเปิดเข้าเวปบริษัท
คลิกเข้าตามขั้นตอนจนถึงการดาวน์โหลด
ทำซ้ำจนดาวน์โหลดไฟล์ครบของทุกบริษัท
การใช้งานโปรแกรมตัวอย่าง
ไปยังโปรแกรมตัวอย่างในคลาส
สำหรับโปรแกรมตัวอย่าง จะต้องทำการดาวน์โหลดไฟล์คำสั่งจากลิ้งค์ด้านบน และทำการเปิดไฟล์คำสั่งผ่านโปรแกรม Anaconda / Jupyter Notebook เพื่อใช้งานบนคอมพิวเตอร์ จะง่ายที่สุด
หากต้องการทดลองใช้งานให้กด / คลิกที่สัญลักษณ์ In [ ] สีน้ำเงินด้านซ้ายของหน้ากระดาษนี้ และกดปุ่ม Run ตามด้านล่าง ทำซ้ำจนครบทุกอัน โดยจะต้องทำตามลำดับจากอันด้านบนลงไปด้านล่างของกระดาษ
หากต้องการดูโฟลเดอร์ของไฟล์ Jupyter Notebook นี้ให้กดที่ File >> Open แล้วโฟลเดอร์ที่ไฟล์ Jupyter Notebook นี้อยู่จะถูกเปิดขึ้น
ติดตั้ง selenium
สำหรับการทำงานของคำสั่ง selenium เพื่อควบคุมเวปไซต์ เราจะต้องมีการติดตั้ง chromedriver ที่มีเวอร์ชันตรงกับ chrome ที่มีอยู่บนคอมพิวเตอร์ และยังต้องการ library ที่ชื่อว่า selenium ติดตั้งไว้เรียกใช้ตามคำสั่งด้านล่างนี้
ติดตั้งเครื่องมือ
In [ ]:
!pip install selenium==3.141.0
นำคำสั่งมาใช้งาน
สำหรับคำสั่งที่จะใช้จริงๆ คือ คำสั่ง webdriver ที่จะนำมาจาก library selenium ดังนั้นจะขอนำมาใช้เพียงแค่ webdriver เท่านั้น
นำเข้าเครื่องมือ
In [ ]:
from selenium import webdriver
เก็บลิ้งค์เวปของทุกบริษัท
ในการเข้าไปทำงานกับข้อมูลของทุกบริษัท ก่อนอื่นเราจะต้องระบุก่อนว่าข้อมูล "ทุกบริษัท" อยู่ที่ไหน นั่นคือการเก็บข้อมูลลิ้งค์ที่เข้าถึงแต่ละบริษัทเพื่อนำมาใช้เข้าไปยังหน้าข้อมูลอีกที
โดยมีขั้นตอนการทำงานเบื้องต้นดังนี้
เปิดเวปไซต์ที่มีลิ้งค์ของทุกบริษัทให้เก็บ
ระบุตำแหน่งของ tag ที่เก็บข้อมูลลิ้งค์เอาไว้ (ในตัวอย่างใช้วิธีการระบุ xpath) และคัดเลือกเฉพาะข้อมูลที่ต้องการ
นำข้อมูลที่เจอจากการะบุตำแหน่งทีละตัวมาทำซ้ำด้วย for loop
ดึงลิ้งค์จาก tag ที่ดึงมาได้
เก็บข้อมูลเอาไว้ใน list เพื่อนำไปใช้งานต่อ
In [ ]:
company_list = []
driver = webdriver.Chrome()
driver.get('https://marketdata.set.or.th/mkt/sectorquotation.do?sector=SET50&language=th&country=TH')
for data in driver.find_elements_by_xpath('//table[@class="table-info"]//tbody//tr//td[@style="text-align: left;"]//a')[8:]:
company_list.append(data.get_attribute('href'))
คลิกตามขั้นตอนเพื่อดาวน์โหลดไฟล์
สำหรับบอทในตัวอย่าง จะเป็นการกดเข้าไปที่ส่วนของข้อมูล และกดลิ้งค์เพื่อดาวน์โหลดข้อมูล
โดยมีขั้นตอนการทำงานเบื้องต้นดังนี้
นำลิ้งค์แต่ละลิ้งค์ออกจาก list
นำลิ้งค์มาเปิดเวปไซต์ที่เก็บข้อมูล
ระบุตำแหน่งส่วนข้อมูลที่ต้องการคลิก
ส่งคำสั่งคลิก
ระบุตำแหน่ง ส่งคำสั่งคลิก ทำซ้ำจนได้การคลิกข้อมูลที่ต้องการ
ทำซ้ำให้ครบทุกบริษัทด้วย for loop
In [ ]:
for company in company_list:
driver.get(company)
driver.find_elements_by_xpath('//div[@class="row"]//li[@role="tab"]')[1].click()
driver.find_elements_by_xpath('//div[@class="col-xs-12 col-md-4 text-center"][@style="border-left: 1px solid #000000;"]')[-1].click()
driver.find_elements_by_xpath('//table[@class="table table-hover table-info"]//tbody//tr[@height="18"]//td[@height="18"]')[-1].click()
การทำงานกับเวปที่มีการเข้า id, password
การระบุตำแหน่ง และส่งคำสั่งพิมพ์ สามารถใช้ประยุกต์สำหรับเวปไซต์ที่มีการเข้า id, password ได้
กำหนด email, password
In [ ]:
email = ''
password = ''
ส่งคำสั่งพิมพ์ข้อความลงไปยังในช่อง id, password
In [ ]:
driver.find_element_by_xpath('//input[@placeholder="E-mail or Username"]').send_keys(email)
driver.find_element_by_xpath('//input[@placeholder="Password"]').send_keys(password)
driver.find_element_by_xpath('//input[@value="ลงชื่อเข้าใช้"]').submit()
Comments