Jul 4, 2009
Saturday, July 04, 2009

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



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


     ก่อนอื่นขอบอกกล่าวกันสักนิด บางท่านบ่นๆ บอกจะยืดเนื้อหาไปถึงไหน ไม่เข้าเรื่องสร้างโปรแกรม Auto Comment สักที ก็ต้องขออภัยมา ณ ที่นี้ด้วย เนื่องจากผมยังไม่ได้สมัคร Hi5 แต่ถ้าอ่านเนื้อหามาตั้งแต่ต้นก็คงพอคลำทางสร้างโปรแกรมได้บ้างแล้ว มีข้อสงสัยถามได้ที่บอร์ดเลยครับ
     และหลังจากบทความตอนนี้แล้ว ผมขอหยุดเขียนบทความเรื่อง Auto Comment เอาไว้สักพักก่อน(รอสมัคร Hi5 แล้วจะมาเขียนต่อ) ขอเสริมบทความด้านอื่นๆ เข้ามาบ้าง ไม่อย่างนั้นบล็อคจะมีแต่บทความ Autoit เต็มหน้าเว็บ
     สำหรับวันนี้ จะศึกษาคำสั่งในการค้นหาลิงก์ที่ต้องการในเว็บ แล้วสั่งให้คลิก หรือทำงานอย่างอื่นตามเงื่อนไขที่กำหนด ขออธิบายตัวโปรแกรมที่จะสร้างกันก่อนนะครับ ตัวอย่างโปรแกรมนี้จะทำงานตามลำดับขั้นตอนนี้คือ
1. เปิดหน้าเว็บบอร์ด (1)
2. ค้นหาลิงก์กระทู้ต่างๆ ที่อยู่ในหน้าเว็บบอร์ด แล้วเข้าไปพิมพ์ข้อความลงไป(2)
3 พิมพ์เสร็จก็ปิดหน้ากระทู้นั้น แล้วเปิดกระทู้ใหม่ เข้าไปพิมพ์อีก จนครบทุกกระทู้ในหน้าเว็บ(3)






โดยคำสั่งที่เราจะศึกษาเพิ่มเติมในตอนนี้คือ

     _IELinkGetCollection เป็นคำสั่งสำหรับดึงเอาลิงก์ที่อยู่ในหน้าเว็บเพจขณะนั้นทั้งหมดออกมา รูปแบบคำสั่งคือ _IELinkGetCollection(ชื่อตัวแปรของหน้าเว็บเพจที่จะให้ดึงเอาลิงก์ออกมา)  ตัวอย่างการใช้คำสั่ง เช่น

$oLinks = _IELinkGetCollection($oIE)

     StringInStr เป็นคำสั่งสำหรับเช็คข้อความที่อยู่ภายในตัวแปรที่กำหนด คำสั่งนี้เราจะนำมาใช้ในการเช็คชื่อลิงก์ เพื่อตรวจสอบว่าลิงก์ที่ดึงเอามานั้นเป็นลิงก์ของกระทู้ต่างๆ หรือไม่ เพราะในหนึ่งหน้าเว็บจะประกอบด้วยลิงก์มากมาย รูปแบบคำสั่งคือ StringInStr(ตัวแปรที่จะตรวจสอบข้อความภายในตัวแปร,"ข้อความที่จะใช้ในการตรวจสอบ") ตัวอย่างการใช้งานคำสั่ง
StringInStr($oLink.href,"test")

     _IEQuit เป็นคำสั่งสำหรับใช้ในการปิดหน้าต่าง IE ที่อยู่ในตัวแปร เอาไว้ใช้สำหรับปิดหน้าต่างกระทู้ที่เราเข้าไปพิมพ์ข้อความ เพราะถ้าไม่ใช้คำสั่งหน้าโปรแกรมที่เราทำขึ้นมาจะเปิดหน้าต่างขึ้นมามากมายตามจำนวนลิงก์กระทู้ในหน้าเว็บบอร์ด รูปแบบคำสั่งคือ_IEQuit (ชื่อตัวแปรของหน้าเว็บ)   ตัวอย่างการใช้งานคำสั่ง
_IEQuit ($oIE2)      

     For...In...Next เป็นคำสั่งสำหรับการนับอาเรย์(Array) ที่บรรจุอยู่ในค่าตัวแปร คำสั่งนี้เราจะนำมาใช้คู่กับคำสั่ง _IELinkGetCollection เนื่องจากตัวแปรดึงข้อมูลมาจากคำสั่ง _IELinkGetCollection จะเป็นตัวแปรแบบอาเรย์ที่บรรจุลิงก์เอาไว้จำนวนมาก รูปแบบคำสั่งมีดังนี้

For (ชื่อตัวแปรที่จะเก็บค่าที่ดึงจากอาเรย์มาตรวจสอบ) In (ชื่อตัวแปรที่เก็บข้อมูลแบบอาเรย์เอาไว้ ซึ่งมาจากคำสั่ง _IELinkGetCollection)

Next เป็นคำสั่งปิดท้ายหลังจากตรวจสอบค่าที่อยู่ในอาเรย์จนหมดแล้ว ก็จะทำตามคำสั่งที่อยู่ถัดจากคำสั่ง Next นี้

ตัวอย่างการใช้งานคำสั่งทั้งหมดเมื่อเขียนออกมาแล้วจะได้ดังนี้
#include <IE.au3>

$oIE = _IECreate ("http://bbznet.pukpik.com/scripts2/board.php?p=6&board=1&user=psix&view_type=&order=numtopic&c=1")
$oLinks = _IELinkGetCollection($oIE)
For $oLink in $oLinks
    If StringInStr($oLink.href,"board=1&id=") Then
       $oIE2 = _IECreate ($oLink)
        $Form = _IEFormGetObjByName ($oIE2, "form1")
$Query = _IEFormElementGetObjByName ($Form, "message")
    _IEFormElementSetValue ($Query, "สวัสดี")
    _IEFormSubmit ($Form)   
        _IELoadWait($oIE2)
                 _IEQuit ($oIE2)       
    EndIf
Next

อธิบายคำสั่ง
#include <IE.au3>
;ดึงเอา Library เพื่อควบคุม IE เข้ามาในสคริปต์

$oIE = _IECreate ("http://bbznet.pukpik.com/scripts2/board.php?p=6&board=1&user=psix&view_type=&order=numtopic&c=1")
;เปิดเว็บบอร์ดในหน้าที่ 6
$oLinks = _IELinkGetCollection($oIE)
;ดึงเอาลิงก์ทั้งหมดในหน้าเว็บบอร์ดเข้ามาอยู่ในตัวแปร $oLinks
For $oLink in $oLinks
;ดึงเอาค่าที่เก็บไว้ในอาเรย์ที่อยู่ในตัวแปรมาแยกประมวลผลทีละค่า

    If StringInStr($oLink.href,"board=1&id=") Then ;ใส่คำสั่งตรวจสอบข้อความที่อยู่ในค่านั้น(คือตรวจสอบลิงก์แต่ละอันนั่นเอง) ถ้าหากเจอก็ค่าที่ต้องการก็ทำตามเงื่อนไขที่กำหนดดังนี้

       $oIE2 = _IECreate ($oLink)
;เปิดลิงก์นั้นในหน้าต่างใหม่ แล้วดึงเอาหน้าต่างนั้นมาเก็บไว้ในตัวแปร $oIE2

        $Form = _IEFormGetObjByName ($oIE2, "form1") ;สั่งโฟกัสไปที่ฟอร์มชื่อ form1

$Query = _IEFormElementGetObjByName ($Form, "message") ;สั่งโฟกัสไปที่ช่องกรอกข้อความในกระทู้ ที่ชื่อ message (การหาชื่อฟอร์มพวกนี้อยู่ในตอนที่ 1)

    _IEFormElementSetValue ($Query, "สวัสดี")
;สั่งให้ส่งข้อความว่า สวัสดี ไปยังช่องกรอกข้อความที่โฟกัสเอาไว้

    _IEFormSubmit ($Form)    
;สั่งคลิกปุ่มส่งข้อความในหน้าเว็บ

        _IELoadWait($oIE2)
;สั่งให้รอให้เว็บโหลดจนเสร็จ

                 _IEQuit ($oIE2) 
;เมื่อโหลดเสร็จก็สั่งปิดหน้าเว็บนั้น       

    EndIf
;จบเงื่อนไขการตรวจสอบข้อความในลิงก์  กลับไปวนซ้ำเพื่อประมวลผลค่าลิงก์ต่อไปจนครบ

Next
;เมื่อประมวลผลจนครบหมดทุกลิงก์แล้ว ก็ทำตามคำสั่งที่อยู่หลังคำสั่ง Next (ตามตัวอย่างนี้ไม่มีคำสั่งอะไรอีกแล้ว)


หลังจากเขียคำสั่งเสร็จ แล้วทดลองทำ เราก็จะได้หน้าเว็บที่มีการโฟสกระทู้ทุกลิงก์ ดังรูปด้านล่างนี้

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

1 comments:

  1. ติดตามๆ น่าสนใจมากๆคับ

    ReplyDelete

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


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