ส่วนนี้เป็นการสอนเขียนโปรแกรม หากคุณต้องการที่ทำเสร็จแล้ว ดาวน์โหลดได้ตามลิงก์นี้ครับPSsix Auto Comment Hi5 โปรแกรมช่วยคอมเมนต์อัตโนมัติ Hi5 |
ตอนที่ 1
หมายเหตุ : ตัวอย่างสำหรับบทความนี้ ใช้เว็บบอร์ดเก่าในการทำ ซึ่งตอนนี้ปิดไปแล้ว
สำหรับตอนที่ 2 ในการศึกษาการสร้างโปรแกรม Auto comment นั้นเราจะทำโปรแกรมสำหรับการปั้มกระทู้กันครับ และก่อนจะเริ่มทำก็ต้องมาทำความเข้าใจกันเสียก่อนว่า ในการทำโปรแกรมใดๆ ก็ตามที่เกี่ยวกับการสร้างโปรแกรมออโต้ในเว็บ เราจำเป็นต้องมีสิ่งที่เรียกว่า จินตนาการ เพราะโปรแกรมที่เราทำนั้นจะเลียนแบบพฤติกรรมของคน คุณต้องคิดให้ออกเสียก่อนว่าลำดับขั้นตอนที่คนปกติทำ มีขั้นตอนอะไรบ้าง จากนั้นก็นำลำดับขั้นตอนดังกล่าวมาเขียนเป็นคำสั่งที่เลียนแบบพฤติกรรมของคน
ตัวอย่าง การสร้างโปรแกรมปั้มกระทู้ในเว็บ ผมจะใช้เว็บบอร์ดในเว็บนี้ทำ ซึ่งจะมีลำดับขั้นตอนปกติดังนี้
1. เปิดหน้ากระทู้ที่จะปั้ม (จะตัดการล็อกอินออกไป เพราะถือว่าสามารถล็อคอินในบอร์ดได้ถาวรอยู่แล้ว ไม่จำเป็นต้องล็อคอินทุกครั้งที่ทำการปั้ม)
2. พิมพ์ข้อความลงในช่องข้อความ
3. คลิกปุ่ม ส่งข้อความ
4. รอจนกระทั่งข้อความที่คลิกส่งปรากฏ แล้วก็เริ่มขั้นตอนที่ 2 วนไปเรื่อยๆ
หากคุณดูและลองทำตามขั้นตอนนี้ จะพบว่ามีปัญหาหนึ่งเกิดขึ้น คือ ในเว็บบอร์ดจะมีระบบป้องกันการฟลัดข้อความอยู่ด้วย หากผู้ใช้ใส่ข้อความเดิมซ้ำๆ ลงไป ก็จะไม่สามารถส่งข้อความขึ้นเว็บบอร์ดได้ วิธีแก้ไขก็ต้องสร้างชุดข้อความเพื่อทำการสุ่มข้อความที่จะส่ง เพื่อไม่ให้ข้อความซ้ำ
และคำสั่งที่จะเพิ่มเติมเข้ามาในบทนี้ก็จะมี
_IELoadWait เป็นคำสั่งให้โปรแกรมรอการโหลดหน้าเว็บให้เสร็จสิ้นเสียก่อน จึงจะทำงานตามคำสั่งถัดไป ควรใส่คำสั่งนี้เอาไว้คั่นระหว่างคำสั่งต่างๆ ที่มีผลให้หน้าเว็บมีการโหลด เช่น คุณสั่งให้คลิกส่งข้อความ หน้าเว็บก็จะโหลดข้อมูลขึ้นสักพักหนึ่ง เราก็ใส่คำสั่งนี้คั่นต่อท้ายไป ทำไมต้องใส่ นั่นก็เพราะว่าหากคุณไม่ใส่คำสั่งนี้ โปรแกรมจะตรวจข้อมูลในหน้าเว็บ หากพบตรงตามเงื่อนไขมันจะทำงานทันทีโดยไม่สนใจว่าหน้าเว็บโหลดเสร็จหรือยัง ซึ่งการทำแบบนี้จะเกิดความผิดพลาดได้ง่ายๆ เพราะข้อมูลในหน้าเว็บโหลดมาไม่หมด รูปแบบคำสั่ง _IELoadWait(ตามตัวชื่อตัวแปรของเว็บที่รอให้โหลดจนเสร็จ) เช่น _IELoadWait($IE)
IniRead เป็นคำสั่งสำหรับอ่านข้อมูลจากไฟล์ .ini เพื่อนำข้อความมาใส่เข้าไปในกระทู้ที่จะปั้ม มีรูปแบบคำสั่งดังนี้ IniRead("ตำแหน่งและชื่อไฟล์นามสกุล ini","เซ็กชั่นที่กำหนดให้อ่านข้อมูล","ชื่อคีย์ที่อยู่ในเซ็กซั่น ซึ่งโปรแกรมจะดึงเอาข้อมูลขึ้นมา","ข้อความมาตรฐานเอาไว้ใช้ในกรณีที่ดึงเอาข้อมูลจากไฟล์ ini ไม่ได้")
โครงสร้างของไฟล์ ini
[SectionName]
Key=Value
เมื่อทำแล้วก็จะได้แบบนี้ (จะมีข้อความภายในคีย์ text1 ถึง text5 ใช้สำหรับสุ่มข้อความ 5 แบบ)
[text]
text1="สุ่มข้อความที่ 1 สวัสดี"
text2="สุ่มข้อความที่ 2 ทดสอบ"
text3="สุ่มข้อความที่ 3 การโฟสข้อความแบบสุ่ม"
text4="สุ่มข้อความที่ 4 ข้อความจะไม่เรียงกัน"
text5="สุ่มข้อความที่ 5 จะสุ่มไปเรื่อยๆ"
แถมท้าย ถ้าคุณสร้างไฟล์ .ini ภายในโฟลเดอร์เดียวกันกับตัวโปรแกรม ควรใช้ตัวแปร @ScriptDir ซึ่งจะช่วยดึงเอาชื่อตำแหน่งไดร์ฟและโฟลเดอร์เดียวกันกับโปรแกรมมาใส่ในคำสั่งอัตโนมัติ
While 1 และ WEnd เอาไว้ครอบชุดคำสั่งที่เราต้องการให้วนลูปไปเรื่อยๆ คำสั่งนี้สำคัญมากเพราะมันจะเป็นตัวชี้ให้โปรแกรมวนซ้ำขั้นตอนต่างๆ ที่เราใส่คำสั่งเอาไว้ ตัวอย่าง ในการสร้างโปรแกรมปั้มกระทู้นี้ เราจะนำเอาคำสั่งมาไว้แบบนี้
1. เปิดหน้ากระทู้ที่จะปั้ม
While 1
2. พิมพ์ข้อความลงในช่องข้อความ
3. คลิกปุ่ม ส่งข้อความ
4. รอจนกระทั่งข้อความที่คลิกส่งปรากฏ
WEnd
จะเห็นได้ว่าพอเอาคำสั่ง While 1 มาไว้หน้าขั้นตอนที่สอง โปรแกรมก็จะเริ่มการพิมพ์ข้อความลงในช่องความใหม่ทุกครั้ง ที่มีการคลิกส่งข้อความ และรอจนข้อความที่ส่งไปปรากฏขึ้นมาในขั้นตอนที่ 4 เสร็จ บางท่านอาจจะสงสัยว่าทำไมไม่เอาคำสั่ง While 1 มาก่อนขั้นตอนที่ 1 เพื่อให้ทำซ้ำหมดทุกขั้นตอนไปเลย ที่ไม่ทำเช่นนั้นก็เพราะ มันจะกลายเป็นการเปิดหน้ากระทู้ใหม่ทุกครั้งที่มีการวนซ้ำนั่นเอง (แบบนี้หน่วยความจำในเครื่องอาจจะหมด หรือเครื่องแฮงค์ไปก่อนเพราะเปิดหน้าเว็บเยอะเกินไป)
Random เอาไว้สุ่มตัวเลข เพื่อนำมาดึงข้อความทั้ง 5 แบบในไฟล์ ini เข้ามาในโปรแกรม รูปแบบคำสั่ง Random(เลขน้อยที่สุดสำหรับการเริ่มสุ่ม,เลขมาที่สุดสำหรับการสุ่ม,กำหนดให้เป็นตัวเลขจำนวนเต็มใส่ 1 ถ้าไม่ใส่จะเป็นตัวเลขแบบมีจุดทศนิยม)
ตัวอย่าง Random(1,5,1) จะเป็นการสุ่มตัวเลขระหว่าง 1 - 5
Switch...Case...EndSwitch เป็นคำสั่ง เพื่ออ่านค่าตัวแปร ถ้าตรงกับเงื่อนไขที่กำหนดก็จะทำตามเงื่อนไขนั้นทันที เราจะใช้คำสั่งนี้คู่กับ Random เพื่อดึงเอาค่าตัวแปรซึ่งสุ่มจำนวนตัวเลข มากำหนดเงื่อนไขในการดึงข้อมูลในไฟล์ ini รูปแบบคำสั่ง
Switch (ตามด้วยชื่อตัวแปรที่จะอ่าน)
Case (ค่าที่นำมาเปรียบเทียบกับค่าที่อยู่ในตัวแปร)
Case (ค่าที่นำมาเปรียบเทียบกับค่าที่อยู่ในตัวแปร)
Case (ค่าที่นำมาเปรียบเทียบกับค่าที่อยู่ในตัวแปร)
EndSwitch (จบการทำงาน)
ตัวอย่าง
$rnd = Random(1,5,1)
;ทำการสุ่มตัวเลข 1 - 5 หนึ่งครั้ง แล้วดึงเอาค่าตัวเลขที่ได้มาเก็บไว้ในตัวแปรชื่อ $rnd
Switch $rnd
; อ่านค่าตัวแปร $rnd
Case 1
;ถ้าได้เท่ากับ 1 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 2
;ถ้าได้เท่ากับ 2 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 3
;ถ้าได้เท่ากับ 3 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 4
;ถ้าได้เท่ากับ 4 ก็ทำตามเงื่อนไขใน Case ข้อนี้
Case 5
;ถ้าได้เท่ากับ 5 ก็ทำตามเงื่อนไขใน Case ข้อนี้
EndSwitch
ดูคำสั่งอาจจะงงๆ ในการนำมาใช้บ้าง มาดูขั้นตอนการทำจะทำให้เข้าใจยิ่งขึ้น
1. สร้างไฟล์ .ini สำหรับเก็บข้อความที่เราจะสุ่มมาใช้เสียก่อน โดยตั้งชื่อเป็น autotxt.ini เก็บไว้ในโฟลเดอร์เดียวกันกับไฟล์สคริปต์ Autoit ภายในไฟล์ก็พิมพ์ตามรูปแบบด้านล่างนี้ได้เลยครับ (อาจจะเปลี่ยนข้อความที่ใช้สุ่มตามต้องการ)
2. หาชื่อฟอร์มและชื่อช่องสำหรับพิมพ์ข้อความในเว็บบอร์ด เพื่อนำมาเขียนคำสั่ง ตามตัวอย่างนี้
ฟอร์มมีชื่อว่า form1
ช่องสำหรับพิมพ์ข้อความมีชื่อว่า message
3. เริ่มเขียนคำสั่ง ผมจะใส่เครื่องหมาย ; เพื่ออธิบายคำสั่งแต่ละบรรทัดไปด้วย
#include <ie.au3>
;ดึงเอา Library เพื่อควบคุม IE เข้ามาในสคริปต์
$txt1 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text1", "NotFound")
$txt2 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text2", "NotFound")
$txt3 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text3", "NotFound")
$txt4 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text4", "NotFound")
$txt5 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text5", "NotFound")
; คำสั่ง 5 บรรทัดนี้เหมือนกัน คือดึงเอาข้อความที่อยู่ในคีย์ text1 ถึง text5 ที่อยู่ในไฟล์ autotxt.ini มาเก็บไว้ในตัวแปร $txt1 - 5 ตามลำดับ
$IE = _IECreate ("http://bbznet.pukpik.com/scripts2/view.php?user=psix&board=1&id=1107&c=1&order=numtopic")
; เปิดกระทู้ในเว็บบอร์ดที่เราจะปั้ม แล้วดึงเอากระทู้ดังกล่าวเข้ามาสู่ตัวแปร $IE
While 1
;เริ่มต้นวนลูป
$Form = _IEFormGetObjByName ($IE, "form1")
;สั่งโฟกัสไปที่ฟอร์ม form1
$Query = _IEFormElementGetObjByName ($Form, "message")
;สั่งโฟกัสไปยังช่องสำหรับพิมพ์ข้อความมีชื่อว่า message (ซึ่งอยู่ในฟอร์ม form1 ที่เราสั่งโฟกัสไปก่อนหน้านี้)
$rnd = Random(1,5,1)
;สั่งให้สุ่มตัวเลข 1 -5 จำนวนหนึ่งครั้ง และดึงค่าที่ได้มาเก็บไว้ในตัวแปร $rnd
Switch $rnd
;อ่านค่าจากตัวแปร $rnd เพื่อนำไปเปรียบเทียบกับ Case ต่างๆ ต่อไปนี้
Case 1
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 1
_IEFormElementSetValue ($Query,$txt1)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt1 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 2
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 2
_IEFormElementSetValue ($Query, $txt2)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt2 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 3
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 3
_IEFormElementSetValue ($Query, $txt3)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt3 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 4
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 4
_IEFormElementSetValue ($Query, $txt4)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt4 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
Case 5
;ถ้าตัวแปร $rnd มีค่าเท่ากับ 5
_IEFormElementSetValue ($Query, $txt5)
;ให้ส่งข้อความที่อยู่ในตัวแปร $txt5 ไปยังช่องสำหรับพิมพ์ข้อความ(ที่เราเก็บไว้ในตัวแปร $Query)
EndSwitch
;จบคำสั่ง Switch
_IEFormSubmit ($Form)
;สั่งให้คลิกปุ่มส่งข้อความในฟอร์ม หลังจากวางข้อความที่ผ่านการสุ่มลงในช่องข้อความเรียบร้อยแล้ว
_IELoadWait($IE)
;สั่งให้รอจะหน้าเว็บโหลดเสร็จเสียก่อนจึงค่อยเริ่มต้นคำสั่งถัดไป
WEnd
;บอกให้รู้ว่าลูปจบแล้ว ให้ย้อนกลับไปเริ่มต้นใหม่ที่ตำแหน่ While 1 อีกครั้ง
สำหรับคำสั่งแบบไม่มีคำอธิบายมาคั่น ดูได้จากด้านล่างนี้นะครับ (ท่านที่จะทดสอบในเว็บบอร์ด ขอให้ตั้งกระทู้ใหม่ทดสอบนะครับ อย่าใช้กระทู้ที่มีการถามตอบทั่วไปทดสอบ)
#include <ie.au3>
$txt1 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text1", "NotFound")
$txt2 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text2", "NotFound")
$txt3 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text3", "NotFound")
$txt4 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text4", "NotFound")
$txt5 = IniRead(@ScriptDir&"\autotxt.ini", "text", "text5", "NotFound")
$IE = _IECreate ("ใส่ลิงก์กระทู้ที่ต้องการให้เปิด")
While 1
$Form = _IEFormGetObjByName ($IE, "form1")
$Query = _IEFormElementGetObjByName ($Form, "message")
$rnd = Random(1,5,1)
Switch $rnd
Case 1
_IEFormElementSetValue ($Query, $txt1)
Case 2
_IEFormElementSetValue ($Query, $txt2)
Case 3
_IEFormElementSetValue ($Query, $txt3)
Case 4
_IEFormElementSetValue ($Query, $txt4)
Case 5
EndSwitch
_IEFormSubmit ($Form)
_IELoadWait($IE)
WEnd
รูปตัวอย่าง คำสั่งที่เขียนในโปรแกรม
สามารถออโต้โพสของบอร์ด BBS ได้ไหมครับ แล้วตั้งเวลาในการหน่วงเวลาโพสอ่ะครับ พอทำได้ไหมครับ แบบ เปลื่ยนหน้าที่จะโพสๆไปเรื่อยๆอะครับ
ReplyDeleteติดต่อกลับที่เมลล์ pa-170340(@)hotmail.คอม
ReplyDeleteface msn google+
ถ้าสามารถทำให้ออโต้โพสบนบอร์ด BBs โดยหน่วงเวลา และเปลื่ยนหน้าบอร์ดไปเรื่อยๆได้อ่ะครับ
ขอบคุณครับ