Я хотел бы сделать следующее. Войдите в веб-сайт, нажмите пару конкретных ссылок, затем нажмите ссылку для загрузки. Я хотел бы запустить это как запланированную задачу в Windows или cron job в Linux. Я не придирчивый к используемому вами языку, но я бы хотел, чтобы это запускалось без добавления окна браузера на экран, если это возможно.
Безгласный интернет-браузер?
Ответ 1
Вот список безгласных браузеров, о которых я знаю:
- HtmlUnit - Java. Пользовательский движок браузера. Ограниченная поддержка JavaScript/DOM эмулируется. Открытый исходный код.
- Ghost - только Python. WebKit основе. Полная поддержка JavaScript. Открытый исходный код.
- Twill - Python/командная строка. Пользовательский движок браузера. Нет JavaScript. Открытый исходный код.
- PhantomJS - Командная строка/все платформы. WebKit основе. Полная поддержка JavaScript. Открытый исходный код.
- Awesomium - С++/. NET/все платформы. Хром основе. Полная поддержка JavaScript. Коммерческая/бесплатно.
- SimpleBrowser -.NET 4/С#. Пользовательский движок браузера. Нет поддержки JavaScript. Открытый исходный код.
- ZombieJS - Node.js. Пользовательский движок браузера. Поддержка JavaScript/эмуляция DOM. Открытый исходный код. На основе jsdom.
- EnvJS - JavaScript через Java/Rhino. Пользовательский движок браузера. Поддержка JavaScript/эмуляция DOM. Открытый исходный код.
- Watir-webdriver с безголовый камень - Ruby через WebDriver. Полная поддержка JS через браузеры (Firefox/Chrome/Safari/IE).
- Spynner - только Python. PyQT и WebKit.
- jsdom - Node.js. Пользовательский движок браузера. Поддерживает JS через эмулируемый DOM. Открытый исходный код.
- TrifleJS - порт PhantomJS с использованием MSIE (Trident) и V8. Открытый исходный код.
- ui4j - чистое решение Java 8. Библиотека обертки вокруг JavaFx WebKit Engine, вкл. безголовых режимов.
- Chromium Embedded Framework - Полная обновленная встроенная версия Chromium с рендерингом вне экрана по мере необходимости. C/С++, с оболочками .NET(и другими языками). Поскольку это Chromium, он поддерживает все. Лицензия BSD.
- Selenium WebDriver - Полная поддержка JavaScript через браузеры (Firefox, IE, Chrome, Safari, Opera). Официально поддерживаемые привязки - это С#, Java, JavaScript, Haskell, Perl, Ruby, PHP, Python, Objective-C и R. Неофициальные привязки доступны для Qt и Go. Открытый исходный код.
Безглавые браузеры, поддерживающие поддержку JavaScript через эмулированный DOM, обычно имеют проблемы с некоторыми сайтами, использующими более продвинутые/неясные функции браузера или имеющие функциональные возможности, которые имеют визуальные зависимости (например, через позиции CSS и т.д.), поэтому, хотя чистый JavaScript поддержка в этих браузерах, как правило, завершена, фактическая поддерживаемая функциональность браузера должна рассматриваться только как частичная.
(Примечание: оригинальная версия этого сообщения упоминается только в HtmlUnit, поэтому комментарии. Если вы знаете другие версии браузера без браузера и имеете права на редактирование, не стесняйтесь редактировать эту запись и добавлять их.)
Ответ 2
Посмотрите 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, если вы ищете большую гибкость.
Ответ 3
Посмотрите PhantomJS, инфраструктура автоматизации на основе JavaScript, доступная для Windows, Mac OS X, Linux, другие * 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();
});
Или оцените заголовок :
var page = require('webpage').create();
page.open(url, function (status) {
var title = page.evaluate(function () {
return document.title;
});
console.log('Page title is ' + title);
});
Примеры из страницы быстрого запуска PhantomJS. Вы даже можете отобразить страницу в PNG, JPEG или PDF с помощью метода render().
Ответ 4
Я сделал это с помощью элемента управления ActiveX Internet Explorer (WebBrowser, MSHTML). Вы можете создать экземпляр, не делая его видимым.
Это можно сделать на любом языке, который поддерживает COM (Delphi, VB6, VB.net, С#, С++,...)
Конечно, это быстрое и грязное решение и, возможно, не подходит в вашей ситуации.
Ответ 5
PhantomJS - это браузер без браузера, основанный на WebKit, который вы можете script с JavaScript.
Ответ 6
За исключением автоматической загрузки файла (так как это диалоговое окно) эта форма выигрыша со встроенным webcontrol сделает это.
Вы можете посмотреть Watin и Watin Recorder. Они могут помочь с кодом С#, который может войти на ваш сайт, перейти к URL-адресу и, возможно, даже помочь автоматизировать загрузку файла.
YMMV, хотя.
Ответ 7
Если ссылки известны (например, вам не нужно искать на них страницу), то вы, вероятно, можете использовать wget
. Я считаю, что он будет выполнять управление состоянием из нескольких наборов.
Если вы немного более предприимчивы, я бы углубился в новые лакомства в Python 3.0. Они перенаправляют интерфейс на свой HTTP-стек и IMHO имеют очень приятный интерфейс, который восприимчив к этому типу сценариев.
Ответ 8
Node.js с YUI на сервере. Посмотрите это видео: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/
Парень в этом видео Dav Glass показывает пример того, как он использует node для извлечения страницы из Digg. Затем он привязал YUI к DOM, который он схватил, и может полностью манипулировать им.
Ответ 9
Если вы используете PHP - попробуйте http://mink.behat.org/
Ответ 10
Ответ 11
Также вы можете использовать Live Http Headers (расширение Firefox) для записи заголовков, которые отправляются на сайт (Login → Links → Download Link), а затем реплицировать их с помощью php с помощью fsockopen. Единственное, что вам, вероятно, потребуется изменить, - это значение cookie, которое вы получаете на странице входа.
Ответ 12
libCURL можно использовать для создания чего-то вроде этого.
Ответ 13
Можете ли вы не просто использовать диспетчер загрузки?
Там лучше, но FlashGet имеет интеграцию с браузером и поддерживает аутентификацию. Вы можете войти в систему, щелкнуть кучу ссылок и поставить их в очередь и запланировать загрузку.
Вы могли бы написать что-то, что, скажем, действует как прокси-сервер, который улавливает определенные ссылки и ставит их в очередь для последующей загрузки, или букмарклет Javascript, который изменяет ссылки, чтобы перейти на "http://localhost:1234/download_queuer?url=" + $link.href
и иметь эту очередь для загрузки, но вы бы переосмыслить колесо менеджера загрузки, а с помощью аутентификации это может быть более сложным.
Или, если вы хотите, чтобы бит "login, click links" также был автоматизирован, просмотрите screen-scraping. В основном вы загружаете страницу через HTTP библиотеки, найти ссылки для скачивания и скачать их.
Немного упрощенный пример, используя Python:
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 после аутентификации с именем пользователя/паролем "имя пользователя" и "пароль". Вы могли бы, конечно, найти более конкретные ссылки, используя селектор HTML BeautifulSoup (например, вы могли бы найти все ссылки с классом "скачать", или URL, начинающийся с http://cdn.example.com
).
Вы можете сделать то же самое на любом языке..
Ответ 14
.NET содержит System.Windows.Forms.WebBrowser. Вы можете создать экземпляр этого, отправить его URL-адресу, а затем легко разобрать html на этой странице. Затем вы можете следовать любым ссылкам, которые вы нашли, и т.д.
Я работал с этим объектом только минимально, поэтому я не эксперт, но если вы уже знакомы с .NET, то, вероятно, стоит посмотреть.