безголовый интернет-браузер? [закрыто]

Я хотел бы сделать следующее. Войдите на веб-сайт, щелкните несколько конкретных ссылок, затем нажмите ссылку для загрузки. Я хотел бы запустить это как запланированное задание в Windows или задание cron в Linux. Я не придирчив к языку, который я использую, но я бы хотел, чтобы это работало без вывода окна браузера на экран, если это возможно.

66 голосов | спросил Jared 2 Maypm09 2009, 16:13:23

14 ответов


0

Вот список браузеров без головы, о которых я знаю:

  • HtmlUnit - Java. Пользовательский движок браузера. Ограниченная поддержка JavaScript /эмуляция DOM. Открытый исходный код.
  • Ghost - только на Python. WebKit основе. Полная поддержка JavaScript. Открытый исходный код.
  • Twill - Python /командная строка. Пользовательский движок браузера. Нет JavaScript. Открытый исходный код.
  • PhantomJS - Командная строка /все платформы. WebKit основе. Полная поддержка JavaScript. Открытый исходный код.
  • Awesomium - C ++ /. NET /все платформы. Хром основе. Полная поддержка JavaScript. Коммерческая /бесплатно.
  • SimpleBrowser - .NET 4 /C #. Пользовательский движок браузера. Нет поддержки JavaScript. Открытый исходный код.
  • ZombieJS - Node.js. Пользовательский движок браузера. Поддержка JavaScript /эмуляция DOM. Открытый исходный код. На основании jsdom .
  • EnvJS - JavaScript через Java /Rhino. Пользовательский движок браузера. Поддержка JavaScript /эмуляция DOM. Открытый исходный код.
  • Watir-webdriver с драгоценный камень без головы - Ruby via WebDriver. Полная поддержка JS через браузеры (Firefox /Chrome /Safari /IE).
  • Spynner - только на Python. PyQT и WebKit.
  • jsdom - Node.js. Пользовательский движок браузера. Поддерживает JS через эмулируемый DOM. Открытый исходный код.
  • TrifleJS - порт PhantomJS с использованием MSIE (Trident) и V8. Открытый исходный код.
  • ui4j - решение Pure Java 8. Библиотека-оболочка для JavaFx WebKit Engine, вкл. безголовые режимы.
  • Chromium Embedded Framework - полная современная встроенная версия Chromium с выводом за пределы экрана при необходимости. C /C ++, с оболочками .NET (и другими языками). Поскольку это Chromium, он поддерживает все . BSD лицензирован.
  • Selenium WebDriver - полная поддержка JavaScript через браузеры (Firefox, IE, Chrome, Safari, Opera ). Официально поддерживаемыми привязками являются C #, Java, JavaScript, Haskell, Perl, Ruby, PHP, Python, Objective-C и R. Неофициальные привязки доступны для Qt и Go . Открытый исходный код.

Безголовые браузеры, которые поддерживают JavaScript через эмулированную DOM, обычно имеют проблемы с некоторыми сайтами, которые используют более продвинутые /неясные функции браузера или имеют функциональность, которая имеет визуальные зависимости (например, с помощью позиций CSS и т. д.), в то время как чистый JavaScript поддержка в этих браузерах, как правило, завершена, фактическая поддерживаемая функциональность браузера должна рассматриваться только как частичная.

(Примечание. В оригинальной версии этого поста упоминается только HtmlUnit, а значит и комментарии. Если вам известны другие реализации браузера без прав и у вас есть права на редактирование, не стесняйтесь редактировать этот пост и добавлять их.)

ответил Nathan Ridley 2 Maypm09 2009, 18:15:26
0

Посмотрите twill , очень удобный язык сценариев для именно того, что вы ищете. Из примеров :

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!

Существует также API-интерфейс Python , если вам нужна большая гибкость.

ответил orip 11 Maypm09 2009, 13:08:04
0

Ознакомьтесь с 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 () .

ответил SteAp 20 AMpFri, 20 Apr 2012 02:42:10 +040042Friday 2012, 02:42:10
0

Однажды я сделал это с помощью элемента управления ActiveX Internet Explorer (WebBrowser, MSHTML). Вы можете создать его экземпляр, не делая его видимым.

Это можно сделать на любом языке, который поддерживает COM (Delphi, VB6, VB.net, C #, C ++, ...)

Конечно, это быстрое и грязное решение, которое может не подходить для вашей ситуации.

ответил Daniel Rikowski 2 Maypm09 2009, 16:18:00
0

PhantomJS - это безголовый браузер на основе WebKit, который можно создавать с помощью JavaScript.

ответил xn. 8 22011vEurope/Moscow11bEurope/MoscowTue, 08 Nov 2011 21:21:39 +0400 2011, 21:21:39
0

За исключением автоматической загрузки файла (так как это диалоговое окно), победная форма со встроенным веб-контролем будет делать это.

Вы можете посмотреть на Watin и Рекордер Watin . Они могут помочь с кодом C #, который может войти на ваш сайт, перейти по URL и, возможно, даже помочь автоматизировать загрузку файла.

Хотя YMMV.

ответил Wayne 2 Maypm09 2009, 16:19:46
0

Если ссылки известны (например, вам не нужно искать их на странице), то вы, вероятно, можете использовать wget . Я полагаю, что это сделает управление состоянием через несколько выборок.

Если вы немного более предприимчивы, я бы углубился в новые вкусности в Python 3.0 . Они переделали интерфейс в свой стек HTTP и, ИМХО, имеют очень хороший интерфейс , который восприимчив к этому типу сценариев.

ответил D.Shawley 2 Maypm09 2009, 16:27:42
0

Node.js с YUI на сервере. Посмотрите это видео: http://www.yuiblog.com /блог /2010/09/29 /видео-стекло-узел /

Парень в этом видео Дэв Гласс показывает пример того, как он использует узел для извлечения страницы из Digg. Затем он прикрепил YUI к DOM, который он схватил, и может полностью им манипулировать.

ответил j03m 18 MarpmFri, 18 Mar 2011 16:57:19 +03002011-03-18T16:57:19+03:0004 2011, 16:57:19
0

Если вы используете PHP - попробуйте http://mink.behat.org/

ответил everzet 23 +04002011-10-23T21:15:10+04:00312011bEurope/MoscowSun, 23 Oct 2011 21:15:10 +0400 2011, 21:15:10
0

Вы можете использовать Watir с Ruby или Watin с моно.

ответил Paco 2 Maypm09 2009, 16:28:26
0

Также вы можете использовать Live Http Headers (расширение Firefox) для записи заголовков, которые отправляются на сайт (Логин -> Ссылки -> Ссылка для скачивания), а затем реплицировать их с помощью php с помощью fsockopen. Единственное, что вам, вероятно, понадобится изменить, - это значение cookie, которое вы получаете со страницы входа.

ответил Alekc 2 Maypm09 2009, 16:29:50
0

libCURL можно использовать для создания чего-то подобного.

ответил Adam Pierce 2 Maypm09 2009, 17:15:01
0

Разве вы не можете просто использовать менеджер загрузок?

Есть и лучшие, но FlashGet имеет интеграцию с браузером и поддерживает аутентификацию. Вы можете войти в систему, щелкнуть несколько ссылок, поставить их в очередь и запланировать загрузку.

Вы можете написать что-то, что, скажем, действует как прокси-сервер, который перехватывает определенные ссылки и ставит их в очередь для последующей загрузки, или букмарклет Javascript, который изменяет ссылки для перехода на "http://localhost:1234/download_queuer?url=" + $link.href и поставьте в очередь загрузки - но вы бы заново изобрели колесо менеджера загрузок, а с аутентификацией это может быть сложнее ...

Или, если вы хотите, чтобы бит "войти в систему, кликать по ссылкам" также был автоматизирован - загляните в очистку экрана .. Обычно вы загружаете страницу через 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 после аутентификации с использованием имени пользователя /пароля «username» и «password». Конечно, вы могли бы найти более конкретные ссылки с помощью селектора HTML BeautifulSoup (например, вы можно найти все ссылки с классом «скачать» или URL-адреса, начинающиеся с http://cdn.example.com).

Вы можете сделать то же самое практически на любом языке ..

ответил dbr 2 Maypm09 2009, 17:26:53
0

.NET содержит System.Windows.Forms. WebBrowser . Вы можете создать экземпляр этого, отправить его по URL, а затем легко проанализировать HTML на этой странице. Затем вы можете перейти по любым ссылкам, которые вы нашли, и т. Д.

Я работал с этим объектом только минимально, так что я не эксперт, но если вы уже знакомы с .NET, то, вероятно, стоит посмотреть.

ответил goric 2 Maypm09 2009, 18:09:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132