2009-05-02 11 views
65

मैं निम्नलिखित करना चाहता हूं। किसी वेबसाइट में लॉग इन करें, कुछ विशिष्ट लिंक पर क्लिक करें, फिर डाउनलोड लिंक पर क्लिक करें। मैं इसे लिनक्स पर विंडोज या क्रॉन जॉब पर निर्धारित समय के रूप में चलाने के लिए चाहता हूं। मैं जिस भाषा का उपयोग करता हूं उसके बारे में मैं पसंद नहीं करता हूं, लेकिन यदि संभव हो तो मैं स्क्रीन पर ब्राउज़र विंडो को ऊपर रखकर इसे चलाने के लिए चाहता हूं।हेडलेस इंटरनेट ब्राउज़र?

+1

यदि आप इसे प्रदर्शित नहीं करेंगे तो ब्राउज़र को तत्काल क्यों करें? यूआरएल के माध्यम से फाइलों को स्थानांतरित करने के लिए अधिकांश भाषाओं में पुस्तकालय हैं। हमें अपनी कार्यान्वयन भाषा बताएं और हम आपको सही दिशा में इंगित कर सकते हैं। –

+3

यह भी बताएं कि आपको जावास्क्रिप्ट समर्थन की आवश्यकता होगी, क्योंकि यह महत्वपूर्ण है। कुछ पुस्तकालय जेएस दुभाषियों में नहीं बनाया गया है। – Anonymous

उत्तर

2

मैंने एक बार इंटरनेट एक्सप्लोरर एक्टिवएक्स कंट्रोल (वेबब्रोसर, एमएसएचटीएमएल) का उपयोग करके ऐसा किया। आप इसे बिना दृश्य किए इसे तुरंत चालू कर सकते हैं।

यह किसी भी भाषा जो COM का समर्थन करता है के साथ किया जा सकता है (डेल्फी, VB6, VB.net, सी #, सी ++, ...)

बेशक

इस एक त्वरित और गंदे समाधान है और नहीं हो सकता है आपकी स्थिति में उपयुक्त है।

1

फ़ाइल के ऑटो-डाउनलोड के अलावा (जैसा कि एक संवाद बॉक्स है) एम्बेडेड वेबcontrol के साथ एक जीत फ़ॉर्म ऐसा करेगा।

आप Watin और Watin Recorder देख सकते हैं। वे सी # कोड के साथ मदद कर सकते हैं जो आपकी वेबसाइट पर लॉगिन कर सकता है, एक यूआरएल पर नेविगेट कर सकता है और संभवतः फ़ाइल डाउनलोड को स्वचालित करने में भी मदद करता है।

हालांकि वाईएमएमवी।

1

यदि लिंक ज्ञात हैं (उदाहरण के लिए, आपको उनके लिए पृष्ठ खोजना नहीं है), तो आप शायद wget का उपयोग कर सकते हैं। मेरा मानना ​​है कि यह कई समारोहों में राज्य प्रबंधन करेगा।

यदि आप थोड़ा अधिक उद्यमी हैं, तो मैं Python 3.0 में नई उपहारों में पहुंचा दूंगा। उन्होंने इंटरफ़ेस को उनके HTTP स्टैक पर रेडिड किया है, और आईएमएचओ, very nice interface है जो इस प्रकार की स्क्रिप्टिंग के लिए अतिसंवेदनशील है।

0

आप रूबी या Watin मोनो के साथ Watir का उपयोग कर सकते हैं।

0

इसके अलावा आप साइट पर भेजे गए हेडर रिकॉर्ड करने के लिए लाइव एचटीपी हेडर (फ़ायरफ़ॉक्स एक्सटेंशन) का उपयोग कर सकते हैं (लॉग इन -> लिंक -> लिंक डाउनलोड करें) और फिर उन्हें fsockopen का उपयोग करके php के साथ दोहराएं। केवल एक चीज जिसे आपको संभवतः विविधता की आवश्यकता होगी वह है कुकीज का मूल्य जिसे आप लॉगिन पेज से प्राप्त करते हैं।

0

libCURL इस तरह कुछ बनाने के लिए इस्तेमाल किया जा सकता है।

0

क्या आप सिर्फ डाउनलोड प्रबंधक का उपयोग नहीं कर सकते?

बेहतर हैं, लेकिन FlashGet में ब्राउज़र-एकीकरण है, और प्रमाणीकरण का समर्थन करता है। आप लॉगिन कर सकते हैं, लिंक का एक समूह क्लिक करें और उन्हें कतारबद्ध करें और डाउनलोड शेड्यूल करें।

आप कुछ ऐसा लिख ​​सकते हैं जो कहते हैं, एक प्रॉक्सी के रूप में कार्य करता है जो विशिष्ट लिंक पकड़ता है और उन्हें बाद में डाउनलोड के लिए कतार देता है, या जावास्क्रिप्ट बुकमार्कमार्क जो "http://localhost:1234/download_queuer?url=" + $link.href पर लिंक को संशोधित करता है और उस कतार को डाउनलोड करता है - लेकिन आप होंगे डाउनलोड-मैनेजर-व्हील को पुन: पेश करना, और प्रमाणीकरण के साथ यह अधिक जटिल हो सकता है ..

या, यदि आप "लॉगिन, लिंक पर क्लिक करें" बिट स्वचालित भी होना चाहते हैं - screen-scraping पर देखें .. मूल रूप से आप पृष्ठ लोड करते हैं एक HTTP पुस्तकालय के माध्यम से, डाउनलोड लिंक खोजें और उन्हें डाउनलोड करें ..

थोड़ा सरलीकृत उदाहरण, अजगर का उपयोग कर:

import urllib 
from BeautifulSoup import BeautifulSoup 
src = urllib.urlopen("http://%s:%[email protected]" % ("username", "password")) 
soup = BeautifulSoup(src) 

for link_tag in soup.findAll("a"): 
    link = link_tag["href"] 
    filename = link.split("/")[-1] # get everything after last/
    urllib.urlretrieve(link, filename) 

कि example.com पर हर कड़ी डाउनलोड होगा, "उपयोगकर्ता नाम" और "पासवर्ड" के नाम/पासवर्ड को प्रमाणित करने के बाद। आप निश्चित रूप से BeautifulSoup's HTML चयनकर्ता का उपयोग करके अधिक विशिष्ट लिंक ढूंढ सकते हैं (उदाहरण के लिए, आपको कक्षा "डाउनलोड" के साथ सभी लिंक मिल सकते हैं, या यूआरएल जो http://cdn.example.com से शुरू होता है)।

आप .. काफी किसी भी भाषा में एक ही कर सकता है

0

नेट System.Windows.Forms.WebBrowser शामिल हैं। आप इसका एक उदाहरण बना सकते हैं, इसे एक यूआरएल पर भेज सकते हैं, और उसके बाद उस पृष्ठ पर एचटीएमएल को आसानी से पार्स कर सकते हैं। इसके बाद आप पाए गए किसी भी लिंक का पालन कर सकते हैं, आदि

मैंने इस ऑब्जेक्ट के साथ केवल न्यूनतम काम किया है, इसलिए मैं कोई विशेषज्ञ नहीं हूं, लेकिन यदि आप पहले ही .NET से परिचित हैं तो शायद यह देखने लायक होगा।

143

यहाँ नेतृत्वहीन ब्राउज़रों की एक सूची है कि मैं के बारे में पता कर रहे हैं:

  • HtmlUnit - जावा। कस्टम ब्राउज़र इंजन। सीमित जावास्क्रिप्ट समर्थन/डीओएम नकल। खुला स्त्रोत।
  • Ghost - केवल पायथन। वेबकिट-आधारित। पूर्ण जावास्क्रिप्ट समर्थन। खुला स्त्रोत।
  • Twill - पायथन/कमांड लाइन। कस्टम ब्राउज़र इंजन। कोई जावास्क्रिप्ट नहीं खुला स्त्रोत।
  • PhantomJS - कमांड लाइन/सभी प्लेटफ़ॉर्म। वेबकिट-आधारित। पूर्ण जावास्क्रिप्ट समर्थन। खुला स्त्रोत।
  • Awesomium - सी ++/.NET/सभी प्लेटफॉर्म। क्रोमियम आधारित। पूर्ण जावास्क्रिप्ट समर्थन। वाणिज्यिक/मुक्त।
  • SimpleBrowser - .NET 4/C#। कस्टम ब्राउज़र इंजन। कोई जावास्क्रिप्ट समर्थन नहीं। खुला स्त्रोत।
  • ZombieJS - Node.js. कस्टम ब्राउज़र इंजन। जावास्क्रिप्ट समर्थन/नकली डीओएम। खुला स्त्रोत। jsdom के आधार पर।
  • EnvJS - जावा/राइनो के माध्यम से जावास्क्रिप्ट। कस्टम ब्राउज़र इंजन। जावास्क्रिप्ट समर्थन/नकली डीओएम। खुला स्त्रोत।
  • Watir-webdriverheadless gem - रूबी वेबड्राइवर के माध्यम से। ब्राउज़रों के माध्यम से पूर्ण जेएस समर्थन (फ़ायरफ़ॉक्स/क्रोम/सफारी/आईई)।
  • Spynner - केवल पायथन। पीईक्यूटी और वेबकिट।
  • jsdom - Node.js. कस्टम ब्राउज़र इंजन। नकली डीओएम के माध्यम से जेएस का समर्थन करता है। खुला स्त्रोत।
  • TrifleJS - एमएसआईई (ट्राइडेंट) और वी 8 का उपयोग करते हुए फैंटॉमजेएस का बंदरगाह। खुला स्त्रोत।
  • ui4j - शुद्ध जावा 8 समाधान। जावाएफएक्स वेबकिट इंजन सहित एक रैपर लाइब्रेरी। हेडलेस मोड
  • Chromium Embedded Framework - आवश्यकतानुसार ऑफ़-स्क्रीन प्रतिपादन के साथ क्रोमियम का पूर्ण अप-टू-डेट एम्बेडेड संस्करण। सी/सी ++, .NET रैपर (और अन्य भाषाओं) के साथ। चूंकि यह क्रोमियम है, इसे सब कुछ के लिए समर्थन है। बीएसडी लाइसेंस प्राप्त है।
  • Selenium WebDriver - ब्राउज़र (फ़ायरफ़ॉक्स, आईई, क्रोम, सफारी, ओपेरा) के माध्यम से जावास्क्रिप्ट के लिए पूर्ण समर्थन।आधिकारिक रूप से समर्थित bindings सी #, जावा, जावास्क्रिप्ट, हास्केल, पर्ल, रूबी, PHP, पायथन, उद्देश्य-सी, और आर अनधिकृत बाइंडिंग Qt और Go के लिए उपलब्ध हैं। खुला स्त्रोत।

बिना सिर ब्राउज़र वाले एक नकल करते डोम के माध्यम से JavaScript का समर्थन नहीं आम तौर पर (इसके आगे जैसे के माध्यम से सीएसएस दशा और) कुछ साइटों है कि और अधिक उन्नत/अस्पष्ट ब्राउज़र सुविधाओं का उपयोग, या दृश्य निर्भरता है कि कार्यक्षमता है के साथ समस्या है, तो whilst इन ब्राउज़रों में शुद्ध जावास्क्रिप्ट समर्थन आम तौर पर पूरा होता है, वास्तविक समर्थित ब्राउज़र कार्यक्षमता को केवल आंशिक माना जाना चाहिए।

(नोट:।। यह पोस्ट केवल उल्लेख HtmlUnit, इसलिए टिप्पणी आप अन्य नेतृत्वहीन ब्राउज़र कार्यान्वयन के बारे में पता है और संपादित करने के अधिकारों है, तो इस पोस्ट को संपादित करने और उन्हें जोड़ने के लिए स्वतंत्र महसूस की मूल संस्करण)

+0

+1, HTMLUnit का जेएस समर्थन एक बड़ा प्लस – orip

+0

है, यह एक हेडलेस ब्राउज़र w/JS समर्थन के लिए मेरी खोज में अब तक की सबसे अच्छी शर्त जैसा लगता है। –

+9

HTMLUnit के लिए जेएस समर्थन भयानक है। यह जवाब मैं डर नहीं है। – KJW

5

चेक आउट twill, जो आप खोज रहे हैं उसके लिए एक बहुत सुविधाजनक स्क्रिप्टिंग भाषा। examples से:

setlocal username <your username> 
setlocal password <your password> 

go http://www.slashdot.org/ 
formvalue 1 unickname $username 
formvalue 1 upasswd $password 
submit 

code 200  # make sure form submission is correct! 

वहाँ भी एक Python API आप अधिक लचीलेपन के लिए देख रहे हैं है।

1

सर्वर पर YUI के साथ Node.js। इस वीडियो को देखें: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/

इस वीडियो में लड़का डेव ग्लास एक उदाहरण दिखाता है कि वह डिग से एक पृष्ठ लाने के लिए नोड का उपयोग कैसे करता है। उसके बाद उसने यूयूआई को उस डोम से जोड़ा जो उसने पकड़ लिया और पूरी तरह से इसे कुशल बना सकता है।

2

PhantomJS एक बिना सिर वेबकिट-आधारित ब्राउज़र है कि आप जावास्क्रिप्ट के साथ स्क्रिप्ट कर सकते है।

3

PhantomJS पर एक नज़र डालें, जावास्क्रिप्ट आधारित ऑटोमेशन फ्रेमवर्क विंडोज, मैक ओएस एक्स, लिनक्स, अन्य * ix सिस्टम के लिए उपलब्ध है।

का उपयोग PhantomJS, तो आप इस तरह कर सकते हैं:

console.log('Loading a web page'); 

var page = new WebPage(); 
var url = "http://www.phantomjs.org/"; 

page.open(url, function (status) { 
    // perform your task once the page is ready ... 
    phantom.exit(); 
}); 

या एक पृष्ठ के शीर्षक का मूल्यांकन: PhantomJS' Quickstart पेज से

var page = require('webpage').create(); 
page.open(url, function (status) { 
    var title = page.evaluate(function() { 
     return document.title; 
    }); 
    console.log('Page title is ' + title); 
}); 

उदाहरण। आप render() विधि का उपयोग कर एक पीएनजी, जेपीईजी या पीडीएफ पर एक पृष्ठ प्रस्तुत कर सकते हैं।

+0

के साथ उपयोग करना आसान था इस उत्तर ने मुझे स्रोत को सहेजने में मदद की जावास्क्रिप्ट चलाने के बाद .: http://stackoverflow.com/a/32019723/511438 –

+0

एक बदसूरत सवाल है, लेकिन शायद आपने इसका परीक्षण किया है: क्या ** PhantomJS ** उन साइटों पर काम करने की उम्मीद है जिनके लिए उपयोगकर्ता नाम/पासवर्ड की आवश्यकता है? –

संबंधित मुद्दे