1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiyuan0918-ppspider

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.en.md

Быстрый старт

npm install -g typescript


* **Подготовка среды разработки**
    Рекомендуется использовать IDEA (Ultimate версия)
    * Снимок экрана версии Ultimate:
        https://s1.ax1x.com/2018/06/13/CO6qRf.png
    * Конфигурация Nodejs и Javascript в IDEA:
        * Конфигурация Nodejs:
            https://i.loli.net/2019/07/11/5d2747dff288e83940.png
        * Конфигурация Javascript:
            https://i.loli.net/2019/07/11/5d2747e00f32352225.png

* **Скачайте и запустите ppspider_example**
    Адрес GitHub для ppspider_example:
    https://github.com/xiyuan-fengyu/ppspider_example
    * Клонируйте ppspider_example с помощью IDEA
        Внимание: требуется git, и путь к исполняемому файлу git должен быть настроен в IDEA.
        * Настройка git в IDEA:
            https://s1.ax1x.com/2018/06/13/COcr6S.png
        * Клонирование из git в IDEA:
            * https://s1.ax1x.com/2018/06/13/COc6mQ.png
            * https://s1.ax1x.com/2018/06/13/COccwj.png
    * Установите зависимости npm
        Запустите следующую команду в терминале:
        ```
npm install
* Запустите tsc
    Запустите 'tsc' в терминале или выполните следующие действия:
    Контекстное меню на package.json -> Показать скрипты npm -> Дважды щёлкните 'автоматическая сборка'
    tsc — это компилятор TypeScript, который может автоматически компилировать файл ts в файл js после любого изменения файла ts.
* Запуск приложения ppspider
    Запустите lib/quickstart/App.js. Откройте http://localhost:9000 в браузере, чтобы проверить статус ppspider.

Развёртывание с помощью Docker

https://github.com/xiyuan-fengyu/ppspider_docker_deploy/blob/master/README.en.md

Примеры

  1. Мониторинг скорости доступа к веб-сайту, визуализация статистики в реальном времени и просмотр деталей всех запросов в процессе открытия веб-страницы. Система ppspider: введение

Декоратор

Объявляется как:

export function TheDecoratorName(args) { ... }

Используется как:

@TheDecoratorName(args)

Декоратор похож на аннотацию в Java, но декоратор сильнее. Декоратор может предоставлять метаданные через параметры и изменять цель или дескриптор для изменения поведения класса или метода. В системе ppspider многие возможности предоставляются декоратором.

@Launcher

export function Launcher(theAppInfo: AppInfo) { ... }

Запуск приложения ppspider. Тип параметра:

export type AppConfig = { 
    // все файлы кэша и файл базы данных будут сохранены в рабочей папке. Вы также можете сохранять файлы данных в этой папке.
    workplace: string;  
    
    // путь к файлу для сохранения статуса выполнения, по умолчанию это рабочая папка + "/queueCache.json"
    queueCache?: string; 
    
    // URL базы данных, поддерживаются nedb или mongodb. Когда приложение будет генерировать небольшой объём данных, используйте nedb, формат URL: nedb://nedbDirPath. В противном случае рекомендуется использовать mongodb, формат URL:
``` **Случайный идентификатор, если он не существует**

Наконец, вернуть массив идентификаторов.

Сценарий использования:

В Puppeteer все методы Page для поиска DOM-элементов по селектору CSS в конечном итоге вызывают document.querySelector / document.querySelectorAll, которые не поддерживают некоторые специальные селекторы CSS, но поддерживаются jQuery. Например: "#someId a:eq(0)", "#someId a:contains('next')".

Таким образом, мы можем вызвать specifyIdByJquery, чтобы присвоить идентификатор узлу DOM и сохранить специальный возвращённый идентификатор, а затем вызвать метод Page со специальным идентификатором.

**PuppeteerUtil.scrollToBottom**

Прокрутка вниз.

**PuppeteerUtil.parseCookies**

Разбор строки cookie на массив SetCookie, затем установка cookie через page.setCookie(...cookieArr).

Как получить строку cookie?

Откройте интересующий URL в Chrome, нажмите F12, чтобы открыть devtools, панель «Приложение», «Хранилище: Файлы cookie: <SomeUrl>», сведения о файлах cookie в левой панели, выберите всё с помощью мыши, нажмите Ctrl+c, чтобы скопировать всё. Вы получите что-то похожее на следующее:

PHPSESSID ifmn12345678 sm.ms / N/A 35
cid sasdasdada .sm.ms / 2037-12-31T23:55:55.900Z 27


**PuppeteerUtil.useProxy**

Установка динамического прокси для одной страницы.

Пример PuppeteerUtil:
[Пример PuppeteerUtil](https://github.com/xiyuan-fengyu/ppspider_example/tree/master/src/puppeteerUtil)
[Одностраничный прокси](https://github.com/xiyuan-fengyu/ppspider/blob/master/src/test/component/ProxyTest.ts)

## NetworkTracing

Перехват всех запросов во время открытия страницы [Пример NetworkTracing](https://github.com/xiyuan-fengyu/ppspider_example/blob/master/src/dataUi/NetworkTracingTest.ts).

## База данных

Nedb поддерживается NedbDao. Mongodb поддерживается MongodbDao. Можно задать «dbUrl» в параметрах @Launcher, затем использовать appInfo.db для доступа к базе данных. Все методы определены в src/common/db/DbDao.

Nedb — это база данных без сервера, нет необходимости устанавливать серверную часть, данные будут сохраняться в локальном файле. Формат URL: nedb://nedbDirectoryPath. Когда объём данных большой, скорость запроса данных низкая, и каждый раз при перезапуске приложения будет затрачиваться много времени на загрузку данных, поэтому используйте его только в случае небольших объёмов данных.

Mongodb требует установки сервера mongo. Формат URL: mongodb://username:password@host:port/dbName. Рекомендуется для сохранения больших объёмов данных.

После запуска приложения автоматически создаётся коллекция заданий для сохранения информации о заданиях во время выполнения.

[Пример базы данных](https://github.com/xiyuan-fengyu/ppspider_example/tree/master/src/db).

## Logger

Используйте logger.debug, logger.info, logger.warn или logger.error для печати журнала. Эти функции определены в src/common/util/logger.ts. Выходные журналы содержат дополнительную информацию: метку времени, уровень журнала, позицию файла источника.

logger.debugValid && logger.debug("test debug"); logger.info("test info"); logger.warn("test warn"); logger.error("test error");


# Отладка

Простой код TypeScript/JS можно отлаживать в IDEA.

Код, который внедряется в JS, можно отладить в Chromium. При создании экземпляра PuppeteerWorkerFactory установите headless = false, devtools = true, чтобы открыть панель инструментов разработчика Chromium.
[Пример отладки внедрения JS](https://github.com/xiyuan-fengyuan/ppspider_example/tree/master/src/debug).

import {Launcher, PuppeteerWorkerFactory} from "ppspider"; import {TestTask} from "./tasks/TestTask";

@Launcher({ workplace: __dirname + "/workplace", tasks: [ TestTask ], workerFactorys: [ new PuppeteerWorkerFactory({ headless: false, devtools: true }) ] }) class App {

}

<html>
    <p>
    Добавьте <span style="color: #ff490d; font-weight: bold">debugger;</span>, где вы хотите отладить.
    </p>
</html>

import {Job, OnStart, PuppeteerWorkerFactory} from "ppspider"; import {Page} from "puppeteer";

export class TestTask {

@OnStart({
    urls: "http://www.baidu.com",
    workerFactory: PuppeteerWorkerFactory
})
async index(page: Page, job: Job) {
    await page.goto(job.url());
    const title = await page.evaluate(() => {

document.title; console.log(title); return title; }); console.log(title); }


При разработке DataUi можно отладить его в браузере.

**Дополнительная информация**
* jQuery: http://www.runoob.com/jquery/jquery-syntax.html.
* Puppeteer: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md.
* Nedb: https://github.com/louischatriot/nedb.
* MongoDB: https://docs.mongodb.com/manual/reference/method/js-collection/.
* Angular: https://angular.io/.
* G2: https://antv.alipay.com/zh-cn/g2/3.x/demo/index.html. G2 интегрирован в веб-интерфейс для визуализации данных в DataUi.
* Bootstrap: https://v3.bootcss.com/css/. Веб-интерфейс объединяет Bootstrap и jQuery, что упрощает использование Bootstrap и jQuery для написания интерфейса UI непосредственно в DataUi. 

**Веб-интерфейс**
Откройте http://localhost:9000 в браузере. 
Панель очереди: просмотр и управление статусом приложения.
Панель заданий: поиск заданий и просмотр деталей.

**Вопрос**
1. При запуске приложения в идее в режиме отладки через некоторое время приложение может зависнуть на строке кода, как при остановке точки останова. Это происходит из-за нехватки памяти, просто добавьте параметр узла «--max-old-space-size=8192», чтобы решить эту проблему. Эта ситуация часто возникала в предыдущих версиях, в основном из-за процессов записи/чтения nedb или процессов сериализации/десериализации QueueManager. В новой версии (v2.1.2) она была оптимизирована.
2. При использовании версии v2.2.0+ свойство workerFactory удаляется из @OnStart, @OnTime, @FromQueue. Если вы хотите использовать страницу puppeteer для сканирования веб-сайта, вы можете импортировать класс Page с помощью:
    ```import {Page} from "ppspider";```
и затем объявить параметр страницы: параметр Page в списке параметров функции обратного вызова. Если использовать
    ```
    import {Page} from "puppeteer"
    ```
для импорта Page, то импортированная Page является всего лишь интерфейсом, который не может быть определён во время выполнения с помощью reflect-metadata, и экземпляр страницы не будет успешно внедрён. Эта ошибка проверяется при запуске.

**Примечание об обновлении**
2020-04-07 v2.2.3
1. Исправлена ошибка: в случае междоменного взаимодействия page.frames могут не найти некоторые фреймы.
2. Оптимизирована реализация PuppeteerUtil.dragJigsaw для повышения точности.

2019-09-04 v2.2.3-preview.1578363288631
1. Исправлена ошибка прерывания задания.

2019-09-04 v2.2.3-preview.1577332807380
1. Исправлена ошибка: задание больше не повторяется после прерывания на интерфейсе UI.
2. Добавлен параметр maxTry для конфигурации задачи и очереди, поддержка всегда попытки при значении maxTry меньше 0.
3. Добавлен defaultDatas в качестве параметра конфигурации по умолчанию для task и queue.
4. Добавлена операция переключения состояния выполнения очереди на интерфейсе UI.
5. Добавлена возможность редактирования параметров timeout/maxTry/defaultDatas на интерфейсе UI.

2019-09-04 v2.2.3-preview.1574909694087
1. OnStart можно настроить для использования BloonFilter (по умолчанию, не будет повторяться после сохранения статуса и перезапуска) или NoFilter (будет повторяться после сохранения статуса и перезапуска).
2. Исправлена ошибка в поиске db по странице.
3. Добавлен новый декоратор OnEvent, используемый для отслеживания системного события, пока есть только одно применение [Пример OnEvent](https://github.com/xiyuan-fengyu/ppspider/blob/master/src/test/component/OnEventTest.ts).

2019-09-04 v2.2.3-preview.1569208986875
1. Исправлена ошибка нулевого указателя в src/common/db/MongodbDao.ts#remove.
2. Добавлен новый параметр для передачи родительской информации о задании для метода обратного вызова JobOverride.
3. Игнорирование классов, которые не отмечены @Serializable, во время процесса сериализации.
4. Исправлена ошибка соответствия RegExp.toString.
5. Добавление поддержки SocksProxyAgent в RequestUtil.

2019-07-31 v2.2.2-preview
1. Исправлена ошибка @Bean @Autowired, поддерживается идентификация типа для @Autowired.
2. Добавлен новый метод RequestUtil.linesToHeaders для анализа заголовков строк; добавлено свойство headerLines в. 1. Добавить необязательный параметр-обработчик для отслеживания ответа в RequestUtil.simple.

2. Автоматически добавлять cookies при использовании PuppeteerUtil.useProxy для проксирования запросов.

3. Обеспечить поддержку асинхронных функций для Page.evaluate, evaluateOnNewDocument, evaluateHandle, $eval, $$eval.

4. Исправлена проблема с импортом страницы.

5. Добавить утилиту UserAgents для получения случайного user-agent.

6. Добавить поддержку регулярных выражений для AddToQueue/FromQueue name.

7. Установить значение по умолчанию для viewport на странице как 1920 * 1080, установить navigator.webdriver=false.

8. Добавить новую функцию PuppeteerUtil.drag для перетаскивания панели.

9. Добавить новый PuppeteerUtil.triggerAndWaitRequest для запуска и отслеживания запроса.

10. Добавить новый PuppeteeUtil.triggerAndWaitResponse для запуска запроса и отслеживания ответа.

11. Предоставить решения для проверки слайдеров:
    * Перетащить панель слева направо (PuppeteerUtil.dragBar).
    * Перетащите панель в нужное место, чтобы завершить головоломку (PuppeteerUtil.dragJigsaw).

12. Переписать способ внедрения экземпляра рабочего через механизм отражения, предоставляемый TypeScript и reflect-metadata, во время вызова метода, украшенного @OnStart, @OnTime, @FromQueue.

13. Убрать свойство workerFactory у @OnStart, @OnTime, @FromQueue. Фреймворк проверяет типы параметров декорированного метода, чтобы определить, нужно ли передавать параметр задания, нужно ли передать экземпляр рабочего (если да, то какой тип рабочего является правильным). Порядок и количество параметров больше не фиксированы.

14. Из-за этого изменения необходимо обновить некоторый код. Нужно убрать свойство workerFactory в @OnStart, @OnTime, @FromQueue. Если вы хотите использовать страницу: Page в методе, декорированном @OnStart, @OnTime, @FromQueue, вам нужно импортировать {Page} из «ppspider» вместо «puppeteer», другие параметры, кроме job: Job, должны быть удалены. Порядок и имя параметров можно определять свободно. Если job: Job не используется в методе, этот параметр также можно удалить.

15. Исправить ошибку: @AddToQueue не работает без @OnStart / @OnTime / @FromQueue.

16. Добавить схему развёртывания на основе Docker.

17. Исправить ошибку однократного прослушивателя в PuppeteerWorkerFactory.overrideMultiRequestListenersLogic.

18. Добавить тип Buffer к параметру content в FileUtil.write.

19. В процессе QueueManager.loadFromCache исправить lastExeTime очереди.

20. Изменить зависимости ui: bootstrap (3.4.1), g2 (@antv/g2, @antv/data-set).

21. Определить window.__awaiter в ui для поддержки async и await в DataUi.

22. Определить window.loadScript в ui, чтобы упростить загрузку сторонних скриптов в DataUi.

23. JobOverride поддерживает асинхронные методы обратного вызова; изменить время, когда JobOverride вызывает метод обратного вызова.

24. Переопределить Add/Remove/Query слушателя запросов страницы, чтобы гарантировать, что страница имеет только один слушатель запросов (theOnlyRequestListener). Пользовательский слушатель запросов будет вызываться через theOnlyRequestListener. Больше нет путаницы относительно того, вызывать request.continue или нет.

25. Переопределить процесс AddToQueue для добавления результата метода в очереди, чтобы Filter поддерживал асинхронную проверку.

26. Переписать прокси-процесс PuppeteerUtil.useProxy по запросу.

27. В интерфейсе UI добавлено описание fail / failed. Количество неудачных попыток в очереди показывает два числа: количество неудачных попыток и количество задач, которые всё ещё не выполняются после максимального количества.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Веб-паук создаётся с помощью Puppeteer. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xiyuan0918-ppspider.git
git@api.gitlife.ru:oschina-mirror/xiyuan0918-ppspider.git
oschina-mirror
xiyuan0918-ppspider
xiyuan0918-ppspider
master