Jun 17, 2009
Wednesday, June 17, 2009

สร้างโปรแกรม Auto comment Hi5 และโปรแกรมควบคุมเว็บด้วย AutoIt :3


ส่วนนี้เป็นการสอนเขียนโปรแกรม หากคุณต้องการที่ทำเสร็จแล้ว ดาวน์โหลดได้ตามลิงก์นี้ครับPSsix Auto Comment Hi5 โปรแกรมช่วยคอมเมนต์อัตโนมัติ Hi5



ตอนที่ 1
ตอนที่ 2

     ในตอนเริ่มต้นของบทแรกผมได้อธิบายถึงส่วนประกอบในเว็บ และสิ่งจำเป็นสำหรับการส่งค่าต่างๆ ขึ้นไปในหน้าเว็บ การระบุชื่อฟอร์มเพื่อโฟกัสวัตถุภายใน เหล่านี้เพียงพอสำหรับเว็บธรรมดาที่ไม่ซับซ้อนมาก ทว่าบางเว็บกลับพบปัญหาไม่สามารถระบุชื่อฟอร์มเพื่อโฟกัสไปยังวัตถุได้ ปัญหาเหล่านี้เกิดจากอะไร มีวิธีแก้ไขอย่างไร มาติดตามได้จากบทนี้ครับ

ก่อนอื่นผมขอยกตัวอย่างปัญหาจากเหตุการณ์จริงของผู้อ่านในเว็บ คือเว็บ Hi5 ตาม URL http://www.hi5.com/friend/displaySearch.do?searchType=advanced โดยที่เราจะเขียนคำสั่งเลือกประเทศในกรอบสีแดงดังรูปด้านล่างนี้





ตามตัวอย่างนี้ ถ้าจะโฟกัสฟอร์ม ตามวิธีการในบทก่อนๆ โดยใช้คำสั่ง
$Form = _IEFormGetObjByName ($IE, "searchForm")
จะทำให้เกิดปัญหาทันที ซึ่งปัญหาที่เกิดขึ้นนั้นมีสาเหตุมากจาก ฟอร์มในเว็บมีชื่อซ้ำกันนั่นเอง ดังรูปด้านล่างนี้ (ลูกศร A) วิธีแก้ไขปัญหาเราจำเป็นต้องเลี่ยงไปใช้คำสั่งอื่นเพื่อให้โปรแกรมโฟกัสฟอร์มที่ต้องการแทน

     โดยใช้คำสั่ง _IEGetObjById แทน เพื่อสั่งให้โฟกัสฟอร์มจากชื่อของไอดี(ดูลูกศร B) รูปแบบคำสั่ง _IEGetObjById(ชื่อตัวแปรของเว็บที่ต้องการอ้างอิง,ชื่อไอดีของฟอร์ม) เมื่อเขียนออกมาเป็นคำสั่งแล้วก็จะได้
$id = _IEGetObjById ($IE, "formSearchDetail")



     อีกคำสั่งหนึ่งที่ต้องใช้คือ _IEFormElementOptionSelect เป็นคำสั่งสำหรับตั้งค่าวัตถุที่อยู่ในฟอร์ม โดยเราสามารถตั้งค่าได้หลากหลายแบบ ในตัวอย่างนี้จะเป็นการตั้งค่าแบบดร็อปดาวน์ลิส ซึ่งนิยมใช้รูปแบบการตั้งค่าอยู่ 2 แบบคือ

1. ตั้งค่าแบบเลือกจากตัวไตเติลข้อความ รูปแบบคำสั่ง _IEFormElementOptionSelect ( ชื่อตัวแปรของวัตถุที่ต้องการตั้งค่า, "ค่าที่ต้องการจะตั้ง", 1, ชนิดค่าที่เลือก "byText" เพื่อกำหนดเป็นแบบไตเติลข้อความ ) ตัวอย่างการใช้คำสั่ง
_IEFormElementOptionSelect($Query,"กรีก",1,"byText")

2.ตั้งค่าแบบเลือกจากค่า Value ซึ่งเป็นค่าเฉพาะของแต่ละตัวเลือกในดร็อปดาวน์ลิส รูปแบบคำสั่ง _IEFormElementOptionSelect ( ชื่อตัวแปรของวัตถุที่ต้องการตั้งค่า, "ค่าที่ต้องการจะตั้ง", 1, ชนิดค่าที่เลือก "byValue" เพื่อกำหนดเป็นแบบ Value ) ตัวอย่างการใช้คำสั่ง
_IEFormElementOptionSelect($Query, "1026", 1, "byValue")



     รูปแบบการเขียนคำสั่งทั้งสองแบบนี้ให้ผลเหมือนกัน แบบที่ 1 จะดูง่ายกว่าในการเขียนคำสั่ง เพราะเป็นการเขียนที่อิงตัวเลือกจากในดร็อปดาวน์ลิสโดยตรง แต่แบบที่ 2 จะอิงจากค่า Value ที่ซ่อนอยู่ในโค้ดคำสั่ง (มองไม่เห็นในหน้าเว็บปกติ)

     ตามปกติแล้วหากคุณเลือกนั้นควรเลือกแบบที่ 2 เนื่องจากความเที่ยงตรงกว่าแบบที่ 1 เที่ยงตรงในทีนี้หมายถึงเว็บบางเว็บนั้นจะมีเช็คค่าภาษาหลักของผู้เข้าชม และจะมีการเปลี่ยนค่าตัวอักษรในดร็อปดาวน์ลิสให้ตรงกับประเทศนั้นๆ เช่น ถ้าพบว่าเราอยู่ในประเทศไทยจากตั้งค่าภาษาหลักในวินโดวส์ ก็จะเปลียนค่าตัวเลือกในดร็อปดาวน์ลิสเป็นภาษาไทย แต่ถ้าพบว่าวินโดวส์ที่เราใช้อยู่ตั้งค่าภาษาหลักเป็นอังกฤษ ก็จะใช้ค่าตัวเลือกในดร็อปดาวน์ลิสเป็นภาษาอังกฤษ


สำหรับคำสั่งเมื่อเขียนให้ส่งการตั้งค่าเข้าไปในดร็อปดาวน์ลิส มีตัวอย่างการใช้ดังนี้ครับ

#include < ie.au3 >

$IE = _IECreate ("http://www.hi5.com/friend/displaySearch.do?searchType=advanced")
;สั่งให้เปิดเว็บ http://www.hi5.com/friend/displaySearch.do?searchType=advanced และดึงเอาค่าของเว็บมาเก็บไว้ในตัวแปร $IE
$id = _IEGetObjById ($IE, "formSearchDetail")
;สั่งโฟกัสไปยังฟอร์มที่มีไอดีชื่อว่า formSearchDetail โดยดึงเอาค่าที่ได้มาเก็บไว้ในตัวแปร $id
$Query = _IEFormElementGetObjByName ($id, "country")
;สั่งโฟกัสไปยังวัตถุที่อยู่ในฟอร์ม ที่ชื่อว่า country และดึงเอาค่าที่ได้มาเก็บไว้ในตัวแปร $Query
_IEFormElementOptionSelect($Query, "1002", 1, "byValue")
;ส่งค่าการตั้งค่าไปยังวัตถุ โดยตั้งค่าเป็นแบบ "byValue"

หมายเหตุ
เลข 1 ที่คั่นอยู่ระหว่างคำสั่ง "1002", 1, "byValue" คือการกำหนดให้มีเลือกวัตถุนั้นแล้วส่งค่าเข้าไป


###จบแล้วครับ###

0 comments:

Post a Comment

    ส่วนนี้สำหรับแสดงความคิดเห็นทั่วไป สอบถามปัญหาตั้งถามได้ที่ฟอรั่ม


>>> [โปรดอ่าน] เนื่องจาก บทความการใช้งานบางโปรแกรมได้โฟสไปนานแล้ว
โปรแกรมอาจมีการอัปเดท วิธีการใช้งาน อาจใช้ไม่ได้ หรือมีวิธีที่ง่ายกว่าในเวอร์ชั่นใหม่
หากคุณพบว่าวิธีการใช้งานไม่ตรงกับบทความในบล็อกนี้ สามารถแนะนำเพิ่มเติมได้ครับ