การร้องขอเว็บอัตโนมัติโดยใช้ curl?


13

ฉันมีระบบ "แบบองค์กร" ที่ฉันต้องใช้ในที่ทำงาน บางคนน่ากลัวด้วยกรอบป๊อปอัพและอื่น ๆ

ฉันกำลังคิดที่จะทำสิ่งต่าง ๆ โดยอัตโนมัติด้วยการใช้ขดหรืออะไรทำนองนั้น ฉันต้องการเข้าสู่ระบบคลิกที่การเชื่อมโยงหลายมิติตั้งค่าข้อมูลบางอย่างและพวกเขาจะโพสต์บางส่วน

เป็นไปได้ไหมที่จะใช้ curl? หรือฉันจะใช้ซีลีเนียมได้ดีกว่า


1
ฉันจะใช้zope.testbrowserของ Python สำหรับสิ่งนั้น
phunehehe

2
คุณจำเป็นต้องใช้ Javascript หรือไม่?
intuited


2
ใช้เซสชั่นเป็นเพียงการส่งรหัสเซสชั่นกับแต่ละคำขอ ทั้งในคุกกี้หรือในพารามิเตอร์ GET wgetและcurlสามารถใช้ไฟล์คุกกี้ของ Netscape ได้ดังนั้นหากเบราว์เซอร์ของคุณใช้ไฟล์ดังกล่าวด้วยอาจจะเพียงพอที่จะระบุให้ผู้ดาวน์โหลดดาวน์โหลด ดังนั้นคุณใช้เบราว์เซอร์ประเภทใด
จัดการ

2
ไม่มีโชคในการแก้ปัญหาง่ายๆกับสิ่งเหล่านั้น Firefox และ Chrome ใช้ SQLite, Opera มีรูปแบบไฟล์ข้อมูลไบนารี ดูเหมือนว่าคุณจะต้องค้นหารหัสเซสชันและส่งต่อด้วยตนเองไปยังตัวดาวน์โหลด
จัดการ

คำตอบ:


13

ใช่มันเป็นไปได้อย่างเต็มที่กับขด --cookie-jarสิ่งสำคัญที่สุดจะได้รับการบันทึกและคุกกี้โหลดระหว่างการใช้ขดกับ คุณสามารถโพสต์ข้อมูลในแบบฟอร์มตามที่ต้องการ ฉันมักจะใช้ส่วนเสริมของ Firefox ที่เรียกว่า Live HTTP Headers เพื่อจับภาพสิ่งที่เกิดขึ้นเมื่อฉันสำรวจเว็บไซต์ มันจะบันทึกส่วนหัวใด ๆ แต่ยังมีการโพสต์รูปแบบใด ๆ ที่เป็นประโยชน์มากเมื่อพยายามที่จะคิดออกว่าจะทำอย่างไรกับขด ฉันได้เขียนสคริปต์ทุบตีโดยอัตโนมัติการขอร้องต่างๆของ curl และใช้ท่อและไฟล์ชั่วคราว (ความอนุเคราะห์mktemp) เพื่อทำการประมวลผลที่ จำกัด บนหน้าเว็บ แต่ถ้าต้องทำการประมวลผลหน้าเว็บจำนวนมาก


นอกเหนือจาก Firefox Live HTTP Headers ทั้ง Safari และ Chrome สามารถแสดงส่วนหัวที่แยกตามวัตถุใน Web Inspector
bahamat

15

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

บางครั้งเมื่อคุณต้องการเข้าสู่ระบบการเข้าสู่ระบบด้วยตนเองครั้งแรกในเว็บเบราว์เซอร์จะทำได้ง่ายขึ้นจากนั้นส่งออกคุกกี้ของเว็บเบราว์เซอร์ (ส่วนขยายเช่นคุกกี้ทั้งหมดหรือส่งออกคุกกี้สำหรับ Firefox สามารถช่วยได้)

หากคุณต้องการวิเคราะห์เนื้อหาของบางหน้าหรือโพสต์แบบฟอร์มคุณอาจต้องใช้เครื่องมือที่นักเล่นชื่นชอบมากกว่าที่จะขดและ wget เครื่องมือที่ดีบางอย่างที่มี Perl ด้วยLWP(libwww)และHTML::TreeBuilder(HTML-Tree)หรือ Python กับไลบรารี่มาตรฐาน (โดยเฉพาะhttplibและhtmllib )

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

ในที่สุดเมื่อคุณต้องการJavascriptแนวทางปกติคือการใช้เว็บเบราว์เซอร์ซึ่งขับเคลื่อนโดยเฟรมเวิร์กการทำงานอัตโนมัติของเบราว์เซอร์ ซีลีเนียมและWatirเป็นตัวเลือกยอดนิยม เห็นด้วยมีเครื่องมือที่ดีนอกเหนือจาก SeleniumRC ที่สามารถดึงหน้าเว็บรวมถึงเนื้อหาที่โพสต์โดย JavaScript หรือไม่?


6

สิ่งที่ฉันชอบคือwgetฉันจะให้ตัวอย่างกับสิ่งนั้น สิ่งที่คุณต้องการทำคือทำซ้ำเซสชันเบราว์เซอร์ของคุณให้ใกล้เคียงที่สุดดังนั้นให้ใช้อาร์กิวเมนต์บรรทัดคำสั่งที่เกี่ยวข้อง สิ่งที่จำเป็นขึ้นอยู่กับการตรวจสอบเว็บไซต์ของเบราว์เซอร์ของคุณอย่างละเอียด --referer(sic) มักจะเพียงพอ แต่คุณยังอาจต้องและ--user-agent--load-cookies

เทคนิคนี้เป็นการเบราว์เซอร์ปลอมแปลง - คุณพยายามที่wgetจะนำเสนอตัวเองไปยังเว็บไซต์เป็นเบราว์เซอร์ ปัญหาที่ใหญ่ที่สุดที่คุณจะเผชิญคือ CAPTCHA ซึ่งไม่ปรากฏในเว็บไซต์ตัวอย่างที่คุณให้ นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณปฏิบัติตามนโยบายการกำหนดเวลาของไซต์ (ในกรณีนี้ 45 วินาที) หรือคุณอาจถูกบล็อก

อาจเป็นไปไม่ได้ที่จะดาวน์โหลดไฟล์เดียวกันข้ามเซสชันที่ต่างกัน - ไซต์ให้สิทธิ์ในการดาวน์โหลดไฟล์เฉพาะไปยังเซสชันที่ระบุ


คำตอบที่ดีพร้อมข้อควรพิจารณาที่ครอบคลุม ขอบคุณ
xiaohan2012
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.