Задать вопрос
  • Как сайты понимают, что их посетил бот на Selenium, а не реальный юзер?

    @qid00000000
    Мало что знаю, но информацию найду в гугле
    Алексей очень хорошо описал причины, которые подтверждаются некоторым личным опытом.

    Очень часто, в логах сервера, в user-agent можно встретить selenium. Достаточно в конфиг прописать правило отклонения запросов с user-agent: (*selenium*) и проблема исчезает.

    Также, те, у кого стоит метрика, могут обнаружить посетителей, которые ничего не делают, после чего отправляют ip в бан руками.

    Обходить это, можно загружая страницу через браузер и случайно сдвигать мышь, случайное количество раз (от 5-10), через случайные промежутки. Спасет от ручной проверки, для большинства сайтов.

    Для 100% гарантии, чтобы не банили, нужно "наводиться" на ссылки, которые нужно распарсить следующими (по очереди). Однако, в этом случае, вы пожертвуете производительностью парсера.

    Как реализовать: Поднять сервис (несколько) на машине с vnc и получать страницу через браузер, имитируя работу мышкой.

    Но, обычно, указать корректный user-agent достаточно. (Я, почему-то уверен, что вы остановитесь на этом варианте).

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

    Владельцу сайта проще заблокировать тот ip, с которого сыпятся запросы, чем проводить оптимизацию кода сайта и выяснять, по какой причине вообще создалась нагрузка (например, из-за не проставленных индексов в бд).
    А порой, это является единственным вариантом, т.к. на сервер, может прилететь за час свыше 10000 запросов к сайту с одного ip.
    Для сравнения от yandex/google, за сутки, может прийти около 4000 запросов (с минимальными настройками индексации).

    В заключение, я скорее всего озвучу желания владельца сайта: "Пожалуйста, собирайте информацию с сайта адекватнее и наиболее приближенно к реальным запросам от людей. Не пытайтесь выгрузить весь сайт за раз в короткий промежуток времени. Тем более, не тестируйте не завершенную программу на реальных сайтах."
    Ответ написан
    Комментировать
  • Как сайты понимают, что их посетил бот на Selenium, а не реальный юзер?

    alekciy
    @alekciy
    Вёбных дел мастер
    Вариантов много. Из простого:
    • по User-Agent
    • по IP адресу через отслеживание количества запросов с одного адреса
    • по используемым публичным прокси (многие такие сервисы явно сообщают, о себе кто они)
    • и т.д.

    Из сложного:
    • отслеживают перемещение мыши
    • ведут аналитику на о типичных поведениях пользователя и ищуют анамалии


    Если начинают банить прямо с самого первого запроса, значит спались на чем то элементарном и примитивном. Потому что при сложных вариантах защиты для сбора аналитики боту дают по сайту походить.
    Ответ написан
    Комментировать
  • Как восстановить сайт на phpyii2 на новом хостинге?

    @Koksario
    Я нашёл workaround
    Позавчера релизнулась 2я верся компоузера и он ставится по умолчанию
    Если нужно быстро решить проблему, ты можешь указать непосредственно мажорную версию 1 и актуальную минурную. Например, на текущий момент это выглядит так:
    php composer-setup.php --version=1.10.16
    Это рабочий вариант, но уверен, что не правильный. Ждём ещё идеи
    Ответ написан
    1 комментарий
  • Как с помощью NLP распознать названия начальных и конечных пунктов маршрута?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    ЕСЛИ "из/от/с": %глагол% %предлог:"из/от/с"% [%откуда%] (добраться из Москвы, выезжаю из Тулы)
    ИНАЧЕ: %существительное% %предлог% [%куда%] (Москвы в Санкт-Петербург, дорога до Витебского вокзала)
    Ответ написан
    Комментировать
  • Как с помощью NLP распознать названия начальных и конечных пунктов маршрута?

    @sunsexsurf
    IT & creative
    во-первых, действительно, вам нужно решить NER-задачу, то есть достать из строки названия. Такое умеет, например, библиотека Natasha (ссылка на гитхаб).
    Потом, как вариант, сделать так: если перед объектом стоит "из" - это значит начальный пункт, если "в" - конечный пункт. Но это вторая задача, которая решается не ML, а с помощью подбора лингвистических правил, скорее.
    Ответ написан
    Комментировать
  • Как грамотно изолировать сервисы на linux-сервере?

    gohdan
    @gohdan
    Системный администратор
    "Каждый проект / сайт в отдельный контейнер" - в корне неверный подход. Контейнеризация - способ изоляции процессов, а не проектов. Т. е. на проекте у вас будет несколько контейнеров (один для ноды, один для реббита, один для постгреса и т. д.), и в основной системе вы будете видеть сразу всю эту кучу контейнеров со всех проектов. Поэтому, если Вы хотите изолировать друг от друга проекты, Ваш выбор - не контейнеры, а виртуалки на KVM (и вот там уже внутри виртуалок можно будет проект разбивать на контейнеры попроцессно). Так у вас будет нормальная изоляция проектов друг от друга, и проблемы в одном проекте будут по минимуму затрагивать другие.
    Ответ написан
    Комментировать
  • Как грамотно изолировать сервисы на linux-сервере?

    @0x131315
    ИМХО наиболее актуально - докер.
    Банально - прост в настройке, есть уже собранные образы на любой вкус, минимальные накладные расходы (можно позволить себе меньше памяти и дешевле железо), лёгкий мониторинг и управление сервисами. Умеет изолировать сервисы, сети и ресурсы. Умеет поднимать упавшие сервисы. Умеет управлять кластерами. Есть множество удобных веб-морд для управления/мониторинга из любого места, где есть браузер.

    По разбиению - рекомендую БД вынести в отдельный общий (глобальный) контейнер, т.к. это будет одна из самых тяжёлых по памяти частей. Несколько БД держать дорого, и имеет смысл, только если проекты несовместимы с общей БД, но такое редкость.
    Часть проектов может работать только с mysql - тогда нужно держать два контейнера с БД: mysql и postgres
    Понятно, что для каждого проекта нужен отдельный ограниченный пользователь в БД.
    Такая организация не только экономит ресурсы, но и позволяет управлять всеми БД через одну веб-морду, а также позволит легко прикрутить бекапы сразу для всех проектов.

    Также отдельно стоит вынести nginx, который будет принимать подключения, обеспечивать безопасность и маршрутизацию по контейнерам. Как минимум это нужно, чтобы собрать все общие настройки в одном месте, и для возможности разделять один внешний порт на множество проектов.
    nginx из проектов можно заменить глобальным (nginx довольно гибкий, достаточно перенести настройки), а можно и не трогать - nginx довольно дешёвый по памяти.

    Также и с FPM, можно держать несколько общих контейнеров с разными версиями - глобальный nginx легко заставить маршрутизировать каждый проект в нужную версию FPM. Но это тоже не особо критично, т.к. FPM тоже дешёвые.
    Специфичные настройки FPM под каждый проект нередко можно компенсировать подключением полифилов внутри проекта, чтобы сэкономить память.

    Естественно все это нужно собирать под docker compose
    И придерживаться правила: всё, что нужно проекту для работы, должно быть в одном docker compose файле (читай - каждый проект в своей папке)

    Ну и в хост-системе, понятно, не должно быть нативно того софта, что работает в контейнерах - будут проблемы с настройками, портами, и вообще, софт в хост-системе по факту не нужен, докером намного удобнее управлять, особенно когда есть несколько несовместимых проектов, и нужны две-три версии одного и того же софта. Без докера такое настраивать - ад.
    Ответ написан
    Комментировать
  • Как грамотно изолировать сервисы на linux-сервере?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Технологий конечно же есть.
    1) Это виртуализация - KVM/Xen
    На мой взгляд предпочтительнее KVM, лучше поддержка, не нужно специальное хост-ядро.
    Немного, процента на 2-3 проигрывает перед XEN, но в удобстве выигрывает однозначно. XEN - только линукс, и только со специальными патчами в ядре на хосте и клиенте.
    Фактически получаете полноценную виртуальную машину, ставите туже все, что душе угодно, хоть линукс, хоть BSD, хоть винду.
    Проблема одна - требует жесткого выделения ресурсов. Поэтому только десяток-другой виртуалок (да и то заивисит от нагрузок).
    По сравнению с железом, сожрет от 3 до 7-10 процентов производительности.
    Тем не менее: мой выбор KVM.
    2) Контейнеризация - Docker/LCX/Virtuozzo.
    Сразу скажу за virtuozzo - ничего про нее говорить не буду. В принципе - очень похожа на XEN.
    Остальные две основаны на CGroups, более того, docker внутри использует LXC.
    Docker - очень распространен и популярен, фактически лидер рынка. Заточен на запуск одной задачи в одном контейнере. Контейнеры можно объединять в группы.
    LXC/LXD - менее распростанен, но очень удобная технология, если нужно контейнеризировать окружение операционки с кучей процессов.

    Мы пользуем и Docker и LXC/LCD. И даже в LXC пускаем Docker.
    Все зависит от задачи.
    Нужен сервис с кучей процессов и окружением - LXC
    Нужен один процесс - docker.
    Нужно полноценное окружение с ядром, куртизанками и гусарами - KVM.

    По факту - около 10 виртуалок KVM, порядка 10 контейнеров LXC, и порядка 20 контейнеров Docker.
    Ответ написан
    7 комментариев
  • Как грамотно изолировать сервисы на linux-сервере?

    Sanes
    @Sanes
    Лучше разделить по стекам через KVM или другую нормальную виртуализацию.
    Например LAMP в одну VM, почту в другую и т.д.
    1. LXC/LXD возможны проблемы из-за кастрированности технологии
    2. Docker вообще не про это

    Virtuozzo Containers пока единственная более или менее полноценная среди контейнеров. Если делить на виртуальные машины.
    Ответ написан
    24 комментария
  • Почему сервер видит реальный ip вместо ip VPN?

    @Karpion
    Я так понял, что есть два компьютера, между которыми есть VPN-соединение. Т.е. у них есть IP-адреса от провайдеров; и IP-адреса от VPN-соединения.
    И с одного - идёт обращение на второй.

    В простейшем случае:
    1. Если первый компьютер обращается к VPN-IP-адресу второго - то обращение идёт через VPN; источник = VPN-IP-адрес первого компьютера.
    2. Если первый компьютер обращается к провайдерскому IP-адресу второго - то обращение идёт через Интернет; источник = провайдерский IP-адрес первого компьютера; это так потому. Это так потому, что иначе - IP-пакеты, порождаемые VPN, не дойдет до второго компьютера как положено.
    Разъясните фразу "Захожу на сайт, работающий на сервере-2" - буду думать дальше.

    Чтобы какие-то сервисы были доступны только с VPN - проще всего блокировать их порты (сами определяйте, какие) на физическом интерфейсе. Если неясно - спрашивайте.
    Ответ написан
    6 комментариев
  • Почему сервер видит реальный ip вместо ip VPN?

    @nApoBo3
    Сам по себе vpn ничего не скрывает. Скрывает или nat, или proxy. Плюс через vpn вообще не может быть доступен ваш внешний адрес, поскольку для трафика внутри туннеля адрес источника это адрес туннельного интерфейса, а не адрес вашего интернет соединения.
    Скорее всего трафик до нужных вам сервисов идёт не через туннель. Смотрите трассировку.
    Ответ написан
  • Почему chromium driver не завершает процесс после закрытия браузера в Selenium?

    Oxyd
    @Oxyd
    Linux enthusiast
    try:
        # do my automated tasks
    except:
        pass
    finally:
        driver.close()
        driver.quit()

    Source©
    Ответ написан
    Комментировать
  • Range slider с разной ценой деления?

    @camelCaseVlad
    Используй https://www.npmjs.com/package/rc-slider, классный пакет с большим суппортом и кастумизацией.

    Вот пример на коленке https://codesandbox.io/s/late-grass-qlyin
    Ответ написан
    Комментировать
  • Каков сценарий использования git для одного разработчика?

    KazeZlat
    @KazeZlat
    Погромист-затейник
    Работаете в ветке dev, периодически вливая ее в master. Для крупных задач (не входящих в один коммит) делаете отдельные ветви из dev.

    Вливая dev в master, делаете это с ключом --squash как то так:
    git checkout master
    git merge --squash dev

    Тут теоретически могут быть конфликты, если вы делали коммиты в masterпараллельно с dev, которые вам надо разрешить, а после уже добавляете и делаете один большой коммит:
    git add -A
    git commit -m "Merged dev: %кратко (или нет) основные изменения%"
    git push


    А чтобы не мозолили глаз висящие коммиты с логической незавершенностью, их можно сливать их перед merge с помощью интерактивного rebase:
    git checkout dev
    git rebase -i master

    Откроется редактор, в котором будет список коммитов ветки dev. Здесь можете слепить ненавистные коммиты с помощью команды squash (и тогда вам предложат отредактировать сообщение) или fixup (тут не предложат) и потом сделать git push --force (для одного не критично, в толпе лучше использовать --force-with-lease.

    Или есть еще вариант - лепить к предыдущему коммиту сразу с помощью git commit --amend

    Ну и после merge уже можете на master лейбл версии повесить.
    Ответ написан
    Комментировать
  • Хочу сделать CarPC на RPi. Как реализовать графический интерфейс?

    @Xilian
    Программист 1С, сетевые технологии, SQL
    В свое время - еще до raspberry делали на via/atom. Потом повалили дешевые головы на андроиде и все забили.

    Логово еще живых тут: www.pccar.ru/index.php?s=b6bcab38dc192353b0e2442c8...
    Ответ написан
    Комментировать
  • Хочу сделать CarPC на RPi. Как реализовать графический интерфейс?

    @researcher1111
    Лучше всего использовать вот эту библиотечку под питон -
    https://wiki.python.org/moin/TkInter
    Ответ написан
    Комментировать
  • Ваш отзыв о надежности Arduino для умного дома?

    @Vasilii_B2
    Разрабатываю ПО и электронику
    У меня свой блок управления светом спаян и смонтирован из Arduino Nano, датчиков движения, блока реле, преобразователя UART -> RS485, БП на 12В, все на постоянку в сеть воткнуто, уже больше года работает, все на Али брал
    Ответ написан
    Комментировать