Pull to refresh

Comments 44

UFO just landed and posted this here
UFO just landed and posted this here
Суть в том, что я ничего особо не изобрел.
За меня все сделал Гугл, добавив headless режим в хром.
Я взял последнюю апишку хрома: https://chromedevtools.github.io/devtools-protocol/
Рано или поздно найдется умелец, который это нормально сделает все нативно через Mojo, и я почти уверен что все на это пересядут.
Ну а про то, что мне не нравится в селениуме с фантомом я же написал.
UFO just landed and posted this here
Мое решение Моджой быть допилено не может. Это другое решение. Это использование хрома в качестве библиотеки. Как тут быть медленным я не понимаю откровенно.
Еще ты упомянул, что у каждой компании есть своя переделка вебкита, который тоже во многом разработка Гугла. Думаю, им очень интересно что-то новое производить и поддерживать, большие компании вообще любят что-то свое пилить, деньги на это тратить. Ага.
Ну да, моя уверенность из пустого места пришла.
Конечно, я понимаю, что ты хвалишь разработки Скрейпингхаба. Мне они тоже очень нравятся (и сама деятельность их), но я просто пишу, про хорошую фичу хрома, которую ты почему-то очень агришь.
Ну правда хорошая фича.
С каких пор вебкит «разработка Гугла»? вроде всегда была Apple, тока Blink Гугалавская замена вебкита.
обидели мой любимый силениум и питончик:
import selenium.webdriver 

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
driver.get_cookies() # получаем куки

WebDriverWait — используется для гибкого задание времени ожидания загрузки страниц
Я точно не помню, но там разве не для текущего домена (и урла соответственно)?
Суть в том, что в этом же примере тебе пришлось перейти на гугл, чтобы получить куки.
А через апи и не надо как бы.
О, еще нельзя HTTPonly куки тырить
А потом Firefox самостоятельно проапгрейдится и код перестанет работать. Нужно будет ждать апдейта модуля селениума.
А потом ты перейдешь на другую винду и выяснится, что этот скрипт почему-то стал открывать еще и консольное окно.
Ты в сердцах плюнешь на FireFox и перейдешь на PhantomJS и выяснится, что некоторые JavaScripts таки работают в нем по другому+ он иногда подвисает непонятно почему.
Ты познаешь БООООЛЬ и больше никогда не захочешь иметь дело с selenium.

Скажу страшное, но я как-то реализовал подобное на стареньком vb6. Основные роботы работают через xmlhttprequest, а когда сайт на javascript, в фоновом режиме включается IE и прогружает страницу.

Такс.
Как понял:
  • вы использовали какой-то фетчер, который что-то прогружал
  • вы использовали IE как движок для джаваскрипта (результат его выполнения вы отправляли себе куда-то)

Так?

Тут немного иначе:
  • мы используем хром, чтобы открыть страничку (т.е. открывается самая настоящая вкладка хрома)
  • ну и соответственно джаваскрипт самый обычный и результат остается в браузере (конечно, это вытащить можно)

Вот

Да, но там тоже прогружался полноценный IE, а потом прога просто забирала DOM в переменную. Другое дело, что медленновато было.

А Scrapy не рассматривали?
Как раз web crawler на Python, более того, весьма известный и востребованный на рынке парсинга сайтов.
Конечно, смотрел.
Собственно Scrapy используется для того, чтобы собирать однотипные данные (это не точно, но похоже на истину).
Ну и там джаваскрипта таки нету. В Scrapnghub (это их продукт) используют Splash, чтобы рендерить Javascript.
Т.е. Scrapy это немного другое.
Я думаю, что возможно внедрение хрома в тот же Scrapy по аналогии с Splash.
Мне же желательно сделать программу, которая будет бегать по сайтику, тыкать некоторые кнопки и еще что-то там.
Т.е. ближайшими аналогами для меня были: PhantomJS, Splash, Selenium все же.
Кстати, если нужно делать js на странице, то TamperMonkey может помочь чем-нибудь. Тут речь идет об исполнении js-кода на странице по фильтру.

Проект открытый, поэтому может написать расширение для перехвата fetch или подобного функционала? WebWorkers с этим вполне могут работать. Уверен, что Chrome на это способен.
Как понял, вы хотите расширение использующее Service Workers для перехвата трафика (и подмены там).
Вообще, идея имеет место для жизни, но я все же бы это делал через Mojo, наверное (но это не точно).
PyQt, а именно QtWebEngine, наверное, и есть тот самый headless Chrome с готовым интерфейсом для Питона, нет?
Ну я его не использовал. Можешь расписать?
Взяли хромиум и сделали к нему апи для плюсов (чтобы загружать урлы, работать с html, управлять куками и т.п.). PyQt, соответственно, предоставляет возможность делать все это на питоне. Phantomjs, кстати, написан как раз поверх qt (только там управление js-ом и менее гибко чем при ручной работе с webengine).

Легче примеры погуглить. Вот, в частности, один старенький для получения скриншота страницы https://webscraping.com/blog/Webpage-screenshots-with-webkit/
Как я понял, парни из QT взяли таки вебкит, но не хром и сделали вполне ничего такой браузер, который за одно можно запустить без головы. Только я не понял пока насколько полноценный. Т.е. поддерживает ли всякие сервис воркеры, стореджи всякие разные и т.д.

Ну а в хроме там 2 варика:
Mojo: оно работает как-то напрямую с хромом, и ты можешь юзать его как библиотечку. (Могу в чем-то ошибаться, поэтому почекай ссылку)
Ну и второй вариант: запускаем обычный хром с флагами, чтобы мы могли с ним общаться через вебсокет, как я и сделал. Апишки тут.
нет. embedded chromium и headless chrome — это перпендикулярные вещи.
headless — это что? Браузер, только без окна и отрисовки страниц и, соответственно, накладных расходов с этим связанных. Webengine, на сколько помню, позволяет это.
Да, но тем не менее хром и хромиум — две разные вещи.
Phantomjs прекращает разработку как раз ввиду выхода хрома с headless mode.
headless chrome

В хромиум тоже впилили, так что для этих целей лишняя прослойка в виде QT вряд ли нужна:
headless chromium
Хотя не уверен, может там интерфейс поинтереснее, не знаю. Я из мира ноды, у нас все сразу по людски делается.
Phantomjs прекращает разработку как раз ввиду выхода хрома с headless mode.

А webdriver впили и на сколько адекватно?
Особенно порадовала подкачка
Автоматическая подкачка последней версии протокола

Ну сейчас я автоматически забираю протокол с localhost:9222/json/protocol

Интересная статья. Но есть вопрос к автору: ваше решение сможет обойти Distil? И ко всем: как вы решаете проблему с Distil? Спасибо

Такс. Distil я не использовал, и не знаю тамошние методы защиты. Мне кажется, это должно обходить примерно на том же уровне, что и селениум. Думаю, если напишешь поведение в браузере похоже на человеческое, то мож и не запалят.
Однако, кто-то должен это протестировать.
В зависимости от сайта, Distil палит селениум в лутшем случее через 30-50 запросов, в худшем через 1. Надо будет протестировать ваш вариант на досуге.
Ну надо повтыкать, что за трюки используются им, чтобы детектить

P.S. Замажь дефолтный User-Agent. Он там палевный :)
P.S. Если что-то не так у меня или непонятно — пиши, потому что я очень часто меняю что-то в проекте сейчас и он не сильно стабилен.
Ребята, подскажите пожалуйста, на чем сейчас проще всего написать бота, который будет парсить странчику и кликать когда спарсил то что ему надо? Естественно с поддерживанием хттп-запросов и чтобы подгружал javascript. Я посмотрел сплэш, но к моему сожалению я совершенно не знаю пайтон. Есть ли что-то подобное на js или php?
Но Splash же lua использует, вроде.
Ну используй PhantomJS или это (если хочешь попробовать использовать решение, которое в статье).
Если честно, я бы на твоем месте использовал PhantomJS, если что-то несложное или какой-нибудь кравлер на ноде.
Спасибо за ответ, думаю самое подходящее для меня будет разобраться в PhantomJS.
У меня есть таск дёргать из dev tools хрома время и график загрузки страницы… я понимаю, что к этому окну можно получить доступ через эмуляцию f12, либо через иньекцию js в само окно браузера, но вот что-то ни один найденнй метод не работает. Идеи?
Стопе. В том, что я написал, не эмуляция F12, там апишки, с помощью которых, ты можешь проделать все тоже самое, чтобы ты мог делать через F12.
Ну и ты там можешь все это проследить.
Говорю, запусти хром с ключом --remote-debugging-port=9222, и подключись к хрому по адресу localhost:9222, потом открой вкладку и открой инспектор.

Получится такая веселая чепуха:
image
Всем добрым людям привет!
Подскажите пжл тулзу, которая позволила бы парсить вэб страницу, но есть небольшое условие, но эти тулзы не должны требовать программирование?
Sign up to leave a comment.

Articles