สารบัญ:

การแมงมุมเว็บไซต์ Ajax ด้วยแบบฟอร์มการเข้าสู่ระบบแบบอะซิงโครนัส: 6 ขั้นตอน (พร้อมรูปภาพ)
การแมงมุมเว็บไซต์ Ajax ด้วยแบบฟอร์มการเข้าสู่ระบบแบบอะซิงโครนัส: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การแมงมุมเว็บไซต์ Ajax ด้วยแบบฟอร์มการเข้าสู่ระบบแบบอะซิงโครนัส: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การแมงมุมเว็บไซต์ Ajax ด้วยแบบฟอร์มการเข้าสู่ระบบแบบอะซิงโครนัส: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: The Ultimate Web Development Course 02-01: Introducing Komodo Edit 2024, ธันวาคม
Anonim
แมงมุมเว็บไซต์ Ajax ด้วยแบบฟอร์มการเข้าสู่ระบบแบบอะซิงโครนัส
แมงมุมเว็บไซต์ Ajax ด้วยแบบฟอร์มการเข้าสู่ระบบแบบอะซิงโครนัส

ปัญหา: เครื่องมือ Spidering ไม่อนุญาตให้ตรวจสอบการเข้าสู่ระบบ AJAX

คำแนะนำนี้จะแสดงวิธีการเข้าสู่ระบบผ่านแบบฟอร์ม AJAX โดยใช้ Python และโมดูลที่เรียกว่า Mechanize สไปเดอร์เป็นโปรแกรมเว็บอัตโนมัติที่กำลังเป็นที่นิยมมากขึ้นสำหรับผู้คนในการรวบรวมข้อมูลออนไลน์ พวกมันคืบคลานไปทั่วเว็บเพื่อรวบรวมวัสดุล้ำค่าเพื่อเติมพลังให้กับบริษัทเว็บไซต์ที่ทรงพลังที่สุด คนอื่นๆ รวบรวมข้อมูลและรวบรวมข้อมูลเฉพาะเพื่อปรับปรุงการตัดสินใจ หรืออนุมานว่า "อยู่ใน" อะไรในปัจจุบัน หรือค้นหาเส้นทางการเดินทางที่ถูกที่สุด สไปเดอร์ (โปรแกรมรวบรวมข้อมูลเว็บ เว็บบ็อต หรือเครื่องขูดหน้าจอ) เหมาะอย่างยิ่งสำหรับการเปลี่ยน HTML goop ให้เป็นข้อมูลอัจฉริยะบางส่วน แต่เรามีปัญหาเกี่ยวกับหน้าเว็บที่เปิดใช้งาน AJAX ซึ่งมีเซสชันที่เปิดใช้งาน JavaScript และคุกกี้ซึ่งไม่สามารถนำทางได้ตามปกติ ชุดเครื่องมือแมงมุม ในคำแนะนำนี้เราจะเข้าถึงหน้าสมาชิกของเราเองที่ pubmatic.com ขั้นตอนเหล่านี้จะแสดงวิธีการปฏิบัติตาม แต่หน้าของคุณจะแตกต่างออกไป มีความสุข!

ขั้นตอนที่ 1: รวบรวมวัสดุ

รวบรวมวัสดุ
รวบรวมวัสดุ

คุณจะต้องเริ่มเสริมทรัพยากรการเขียนโปรแกรมของคุณ คุณจะต้องใช้โปรแกรมต่อไปนี้ ใช้คำแนะนำของพวกเขาเพื่อช่วยคุณติดตั้งสิ่งเหล่านี้…ติดตั้ง FirebugIt's a Firefox addonInstall PythonGo to: python.orgGo to: python.orgInstall the Mechanize ModuleGet MechanizeGet Mechanizeเครื่องมือ Spidering อื่น ๆ ที่มีประโยชน์: BeautifulSoup

ขั้นตอนที่ 2: ค้นหาส่วนหัวที่จำเป็นในการสร้างเซสชัน

แมงมุมที่สร้างขึ้นมาอย่างดีจะเข้าถึงหน้าเว็บราวกับว่ามันเป็นเบราว์เซอร์ที่ถูกควบคุมโดยมนุษย์ซึ่งคอยหาเบาะแสว่าต้นกำเนิดที่แท้จริงนั้นถูกซ่อนไว้ ส่วนหนึ่งของการโต้ตอบระหว่างเบราว์เซอร์และเซิร์ฟเวอร์เกิดขึ้นผ่านคำขอ GET และ POST ที่คุณสามารถพบได้ในส่วนหัว (ข้อมูลนี้ไม่ค่อยปรากฏบนเบราว์เซอร์ แต่สำคัญมาก) คุณสามารถดูข้อมูลบางส่วนได้โดยกด Ctrl I (ใน firefox) เพื่อเปิดหน้าต่าง Page Info ในการปลอมตัวเป็นเบราว์เซอร์ที่ไม่สุภาพ คุณต้องระบุตัวเองโดยใช้ข้อมูลประจำตัวเดียวกัน หากคุณพยายามเข้าสู่ระบบแบบสาธารณะโดยปิดใช้จาวาสคริปต์ในเบราว์เซอร์ของคุณ คุณจะไปได้ไม่ไกลนักเนื่องจากการเปลี่ยนเส้นทางทำผ่านจาวาสคริปต์ ดังนั้น เมื่อพิจารณาว่าสไปเดอร์เบราว์เซอร์ส่วนใหญ่ไม่มีล่ามจาวาสคริปต์ เราจะต้องเข้าสู่ระบบผ่านเส้นทางอื่น เริ่มต้นด้วยการรับข้อมูลส่วนหัวที่ส่งจากเบราว์เซอร์เมื่อคุณคลิกส่ง หากนี่เป็นการเข้าสู่ระบบเบราว์เซอร์ทั่วไป คุณจะต้องใช้ Mechanize เพื่อกรอกแบบฟอร์มและคลิกส่ง แบบฟอร์มการเข้าสู่ระบบปกติจะถูกห่อหุ้มไว้ภายในแท็ก … และ Mechanize จะสามารถส่งสิ่งนี้และสำรวจหน้าถัดไปได้โดยไม่มีปัญหา เนื่องจากเราไม่มีแท็กแบบฟอร์มที่กรอก ฟังก์ชันการส่งจึงได้รับการจัดการโดยจาวาสคริปต์ มาตรวจสอบฟังก์ชัน sendForm ของ pubmatic กัน ในการดำเนินการนี้ ก่อนอื่นให้เปิดหน้าเว็บใน firefox และเปิด firebug โดยคลิกที่หิ่งห้อยที่มุมล่างขวา จากนั้นคลิกแท็บสคริปต์ คัดลอกโค้ดทั้งหมดที่ปรากฏและวางลงในซอฟต์แวร์แก้ไขข้อความที่คุณชื่นชอบ จากนั้นคุณสามารถลบรหัสทั้งหมดยกเว้นฟังก์ชัน submitForm มันเริ่มต้นด้วยฟังก์ชัน "submitForm(theform) {" และทุกอย่างในระหว่างนี้และฟังก์ชันปิดวงเล็บปีกกา "}" ในการวิเคราะห์ฟังก์ชันนี้ในขั้นต้นเราสังเกตเห็นว่าการรับรองความถูกต้องบางอย่างเกิดขึ้นโดยนำตัวแปรที่เรียกว่า xmldoc กลับมาซึ่งกำลังแยกวิเคราะห์เป็น xml นี่เป็นคุณสมบัติหลักของ AJAX ซึ่งได้ทำการสำรวจเซิร์ฟเวอร์และนำเอกสาร XML บางส่วนที่มีแผนผังข้อมูลกลับมา โหนด session_id มี session_id หากการพิสูจน์ตัวตนสำเร็จ คุณสามารถบอกสิ่งนี้ได้โดยดูที่บิตของโค้ดนี้: "if (session_id != null) { //loginประสบความสำเร็จ" ตอนนี้ เราต้องการป้องกันไม่ให้จาวาสคริปต์ส่วนนี้พาเราไปที่ใดก็ได้ เพื่อที่เราจะได้เห็นว่ามีการโพสต์อะไรไปยังเซิร์ฟเวอร์ระหว่างการตรวจสอบความถูกต้อง ในการดำเนินการนี้ เราแสดงความเห็นเกี่ยวกับการเปลี่ยนเส้นทางของหน้าต่างที่มีลักษณะดังนี้: "window.location=…" หากต้องการแสดงความคิดเห็นนี้ ให้เพิ่มเครื่องหมายทับคู่ก่อนหน้า: "//window.location…" ซึ่งจะป้องกันไม่ให้โค้ดทำงาน คุณสามารถดาวน์โหลดไฟล์ Javascript ด้านล่างซึ่งมีการแก้ไขเหล่านี้แล้ว คัดลอกและวางจาวาสคริปต์ที่แก้ไขแล้วนี้ลงในหน้าต่างคอนโซลทางด้านขวามือแล้วคลิกเรียกใช้ ซึ่งจะแทนที่ฟังก์ชันจาวาสคริปต์ที่มีอยู่แล้วในหน้าเว็บด้วยเวอร์ชันใหม่ของเรา ตอนนี้เมื่อคุณกรอกข้อมูลประจำตัวของคุณและคลิกส่ง คุณจะเห็นข้อมูลส่วนหัว POST และ GET เติมคอนโซล แต่คุณจะไม่ไปไหน ข้อมูล POST คือข้อมูลที่ส่งไปยังเซิร์ฟเวอร์โดยฟังก์ชัน AJAX คุณต้องการให้มาก เช่นนี้ให้คัดลอกและวางข้อมูลนั้นลงในแผ่นจดบันทึก

ขั้นตอนที่ 3: เตรียมรหัส

ก่อนที่เราจะเพิ่มส่วนหัวใหม่ที่เราพบ มาสร้างเทมเพลตรหัสงูหลามเข้าสู่ระบบ Mechanize เราทำสิ่งนี้ด้วยเหตุผลสองประการ อย่างแรก เรามีส่วนประกอบที่ทำงานเพื่อเพิ่มสิ่งใหม่ๆ และอย่างที่สอง เพื่อให้คุณเห็นว่าปกติแล้วคุณจะเข้าสู่ระบบไปยังหน้าเว็บที่ไม่ใช่ AJAX-y ได้อย่างไร เปิดแผ่นจดบันทึกหรือเทียบเท่า แล้วคัดลอกและวาง กำลังติดตาม. เมื่อคุณทำเสร็จแล้วให้บันทึกเป็น youfilename.py ที่ไหนสักแห่งที่คุณสามารถหาได้#!/usr/bin/python# -*- coding: utf-8 -*-#Start with your module imports:from mechanize import Browser #Create your อินสแตนซ์ของเบราว์เซอร์ผ่านการเรียกใช้ฟังก์ชัน Browser();br = Browser()#Set เบราว์เซอร์เพื่อที่มันจะละเว้นคำขอ spiders.txt# ทำอย่างระมัดระวัง หากหน้าเว็บไม่ชอบสไปเดอร์ พวกเขาอาจจะไม่พอใจที่พบคุณ.set_handle_robots(False) #Open the page you want to login tobr.open("https://pubmatic.com/04_betasignin.jsp")#เนื่องจากฉันรู้ชื่อแบบฟอร์ม ฉันจึงสามารถเลือกแบบฟอร์มโดยใช้ชื่อbr.select_form ("เข้าสู่ระบบ")#การใช้ชื่อขององค์ประกอบแบบฟอร์ม ฉันป้อนชื่อขององค์ประกอบแบบฟอร์มbr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () ส่งแบบฟอร์มและดึงหน้าผลลัพธ์ คุณสร้างอินสแตนซ์เบราว์เซอร์ใหม่#response ด้านล่างมี pageresponse ที่เป็นผลลัพธ์ = br.submit()# ซึ่งจะพิมพ์เนื้อหาของหน้าเว็บที่ได้รับ#print response.read()

ขั้นตอนที่ 4: ส่งสัญญาณที่ถูกต้อง

ส่งสัญญาณที่ถูกต้อง
ส่งสัญญาณที่ถูกต้อง

Mechanize มีฟังก์ชันที่ง่ายในการเพิ่มส่วนหัวให้กับส่วนหัว POST ซึ่งจะทำให้เราสามารถปรากฏบนเบราว์เซอร์เดียวกันกับที่คุณใช้ในการเข้าถึงหน้าในครั้งแรก เปิดไฟล์ที่มีส่วนหัวที่คุณพบโดยใช้ Firebug และแก้ไขไฟล์ข้อความนี้ให้ตรงกัน แทนที่ทุกอย่างในเครื่องหมายคำพูดด้วยรายการที่ถูกต้องจากรายการส่วนหัว:USER_AGENT = "Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.8.1.9) Gecko/20071102 Pardus/2007 Firefox/2.0.0.9" HOST = "pubmatic.com"ACCEPT = "ข้อความ/xml, แอปพลิเคชัน/xml, แอปพลิเคชัน/xhtml+xml, ข้อความ/html;q=0.9, ข้อความ/ธรรมดา;q=0.8, รูปภาพ/png, */*;q= 0.5"ACCEPT_LANGUAGE = "en-us, en;q=0.5"ACCEPT_ENCODING = "gzip, deflate"ACCEPT_CHARSET = "ISO-8859-1, utf-8;q=0.7, *;q=0.7"KEEP_ALIVE = "300" CONNECTION = "keep-alive"CONTENT_TYPE = "application/x-www-form-urlencoded"REFERER = "https://pubmatic.com/04_betasignin.jsp"CONTENT_LENGTH = "60"COOKIE = "utma=103266945.1970108054.1210113004.121210087.1212791201.21201.2; KADUSERCOOKIE=EA2C3249-E822-456E-847A-1FF0D4085A85; utmz=103266945.1210113004.1.1.utmccn=(โดยตรง)|utmcsr=(โดยตรง)|utmcmd=(ไม่มี); JSESSIONID=60F194BE2A5D31C3E861MA. no-cache"CACHE_CONTROL ="no-cache" สิ่งนี้จะสร้างชุดของตัวแปรที่คุณสามารถใช้เพื่อผนวกเข้ากับส่วนหัวของเรา ใช้รหัสนี้:br.add_header = [("โฮสต์", HOST)]br.add_headers = [("User-agent", USER_AGENT)]br.add_headers = [("Accept", ACCEPT)]br.add_header = [("Accept-Language", ACCEPT_LANGUAGE)]br.add_headers = [("Accept-Encoding", ACCEPT_ENCODING)]br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)]br.add_header = [("รักษาชีวิตไว้" ", KEEP_ALIVE)]br.add_headers = [("Connection", CONNECTION)]br.add_header = [("Content-Type", CONTENT_TYPE)]br.add_header = [("Referer", REFERER)]br.add_header = [("ความยาวเนื้อหา", CONTENT_LENGTH)]br.add_headers = [("คุกกี้", คุกกี้)]br.add_headers = [("Pragma", PRAGMA)]br.add_headers = [("การควบคุมแคช", CACHE_CONTROL)]ตอนนี้เมื่อเราเรียกใช้ฟังก์ชันเปิดหน้า ส่วนหัวจะถูกส่งไปยังเซิร์ฟเวอร์ด้วย br.open("https://pubmatic.com/04_betasignin.jsp")

ขั้นตอนที่ 5: คุกกี้ยานยนต์

คุกกี้ยานยนต์
คุกกี้ยานยนต์

ขั้นตอนนี้เป็นเพราะกลไกจัดการคุกกี้โดยอัตโนมัติ แต่สิ่งสำคัญคือต้องรู้ว่าเกิดอะไรขึ้น:

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

ขั้นตอนที่ 6: กุญแจสู่หัวใจ

ตอนนี้เราได้รับ ID เซสชันและ Mechanize บันทึกไว้ในคุกกี้แล้ว เราสามารถติดตามจาวาสคริปต์เพื่อดูว่าเราต้องไปที่ใด มองเข้าไปใน "if (session_id != null) { //loginประสบความสำเร็จ" เพื่อดูว่าจะประสบความสำเร็จไปถึงไหน ดูรหัสการย้ายหน้าต่าง: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Math.random()*10000;" เราเห็นว่าเราต้องไปที่เว็บไซต์ที่ https://pubmatic.com/05_homeloggedin.jsp?v=some random number ดังนั้นเรามาสร้างตัวเลขสุ่มปลอมเพื่อป้อนและสร้างอินสแตนซ์ของเบราว์เซอร์ใหม่เพื่ออ่านหน้าที่เพิ่งเปิดใหม่:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")และนั่นก็ควร ไม่ว่าจะเป็น ตอนนี้รหัสของคุณสมบูรณ์แล้ว โดยใช้ส่วนหัวที่เหมาะสมและกลไกจัดการคุกกี้ ตอนนี้เราสามารถเข้าถึงอวัยวะภายในของ pubmatic เปิดเทอร์มินัล โหลดแพ็คเกจหลามด้านล่างและเข้าสู่ระบบออกไป เมื่อต้องการทำประเภทนี้ python2.5 จากนั้นพาธไฟล์ไปยังไฟล์.py

แนะนำ: