СПАСИБО Автору за этот обучающий курс. Своё изучение в Selenium я решил начать с этого курса и я рад тому что я смог первым делом найти именно его. Все рассказано понятным языком и к тому же ролики быстро и подробно показывают определённые аспекты в этом языке.
@@zprogerривет, подскажи пожалуйста как решить проблему с закрытием браузера хром? Я написал банальный код что бы он просто его открыл, команды закрыть не давал. Где я только не искал решение этой проблемы , не могу найти 😢 Windows 10, использовал webdrivermanager
Как по мне идеальный формат видео (выполнение реальной работы) - вообще очень было интересно как говориться будни программиста посмотреть и какой код пишите в реале (как говориться хотелось бы прикоснуться к реальному продукту)
@@zproger о! Спасибо! Даже за направление спасибо, потому что пробовал через win32 + pyautogui, но wib32 почему то не работала, как в видосах... А pyautogui ну прям слишком топорно по пикселям вымерять...
Спасибо за видео! Сделай пожалуйста в следующем видео пример того, как можно спарсить номер на авито. Он представлен там как картинка. Через json авито подменяет номер из объявление, в итоге парсится совсем другой номер.
Впервые у вас. Учусь программировать. Пока даже не джун, потому ищу всю информацию, которая может помочь в развитии. Если позволите, дам немного критики: вы уж очень быстро некоторые моменты делаете, что я не успеваю понять, что конкретно произошло и почему надо так. Но эта придирка меркнет в сравнении с тем, насколько полезен был данный контент в целом. Пожалуйста, делайте больше таких видео. 299ый лайк+подписка
Не знаю кому как, а для меня это очень-очень залипательный канал... Автор, прошу снять видео по коду для накрутки лайков на Ютубе... Обязуюсь испытать на "кошках", а лайки накрутить на Ваш канал! Спасибо огромное за Ваш труд! Мое уважение!
Ни ваш вариант ни даже так не работает :( group_size = driver.find_element(By.CLASS_NAME, "tourPage__container").find_element(By.CLASS_NAME, "tourPageRight").find_element(By.CLASS_NAME, "tourPage__main__sidebar").find_element(By.CLASS_NAME, "middle").find_element(By.CLASS_NAME, "size_group").find_element(By.CLASS_NAME, "right").text
спасибо, отличное видео > 5:32 ... в один файл хотя так делать не стоит ... - хотелось бы, на самом деле, "как стоит" посмотреть лево руля, уже был такой комментарий, ждём видео "как стоит"
Там где парсили размер группы, и не работал просто text, можно сделать .get_attribute('innerText'). У меня так заработало, и никакой CSS_SELECTOR не потребовался
Наконец-то я нашел то, что долго искал - парсинг информации не только с листингов карточек, но и по ссылкам. Огромное спасибо за видео! Хочу спросить, как такое же сделать с сохранением в CSV, а не в JSON?
Интересно было бы увидеть методы для обхода парсинга без использования Selenium. Так как он работает довольно медленно. Интересно было бы глянуть на какие-то опесорсы от программистов, которые нашли методы для обхода парсинга без использования эмулятора браузера
Спасибо за видео! Если будет возможность и желание прошу рассказать как можно в selenium скролить страницу - бывают сайты, которые подгружают информацию по факту скрола.
Это можно сделать примерно так: from selenium.webdriver.common.keys import Keys html = driver.find_element_by_tag_name('html') html.send_keys(Keys.DOWN)
Опыт мне подсказывает что там скорее всего было несколько классов size_group и надо было юзать find_element[S] и выбрать из списка. Css selector меняется чаще чем class name и его только на крайняк. И кстати, прежде чем юзать какой нить селектор или class_name, xpath и тд его лучше для начала в самом же браузере проверить. В хроме не знаю но в мазиле есть такая возможность.
Ответ найден) смотрите под комментарием) Извините за назойливость, интересует один вопрос как при определении функции или класса аннотировать тип переменной :() ну вы поняли надеюсь суть вопроса) Это для того чтобы методы IDE-шка подсказывала. Заранее спасибо.
from selenium.webdriver import Chrome as Driver class Parsing(): def __init__(self, response: Driver ): self.res = response тем самым мы аннотируем аргумент response объектом класса вебдрайверChrome - следовательно нам доступны все методы.
чтобы улучшить дедукцию читая текст задирай голову в верх чтобы слюни не мешали . и записывай короткими частями чтобы красивее казалось а не так как будто ты только что с пробежки . и прекрати пожалуйста выделять приставки "кы" и "Вы" там кстати нет ы !!! от тебя после 1 видоса бесит но блин настолько офигенный контент что просто спасибо и спасибо хочется говорить и несколько лайкосов поставить .
Трудно ли реализовать бота , который будет парсить сайты на товары которые очень трудно найти в наличии. Чтоб получать уведомления со ссылкой на товар когда он будет в продаже? Было бы круто иметь такого бота)).
Здравствуйте. Спасибо большое за видео, было очень познавательно, но скажите, пожалуйста, меня вот очень сильно заинтересовала эта вот оболочка стеалтх над селениумом, ведь стеалтх в переводе означает "скрытный". Вот скажите, пожалуйста, при разработке игры, где ты типа грибок и прыгаешь по супермарио можно ли грибочек сделать невидимым или скрытным, то есть дать ему оболочку стеалтх, чтобы вот геймплей был более завораживающим?!
300 уже есть, даже 413 )) Думаю пора рассмотреть мультипроцесс, асинхронность и данную ошибку - [0429/203926.357:ERROR:ssl_client_socket_impl.cc(999)] handshake failed; returned -1, SSL error code 1, net_error -101 Думаю у многих она есть, в инете есть опции которые типа скрывают ошибки, но нет )
@ZProger [ IT ] Кстати, как тебе идея сделать видео про правильную разбивку кода на файлы, тип когда не всё в одном пишешь, а когда разбиваешь код на части и пихаешь его в разные файлы связанные друг с другом
Здравствуйте. Мы задались целью спарсить ОЛХ Узбекистана. Мы использовали datacool но программа ОЛХ распознает и блокирует нас. Скажите пожалуйста не могли бы вы используя тот механизм, о котором шла речь в видео сделать парсер для ОЛХ узбекистана?
Занимательная лекция!!) Однако я столкнулся с проблемой: ERROR:ssl_client_socket_impl.cc(983)] handshake failed; returned -1, SSL error code 1, net_error -101 Cмотрел решение на стаке, но не помогло. Что я делаю не так?
Здравствуйте. У меня в окне браузера на долю секунды появляется красного цвета содержимое, а потом перекрашивается в зеленое. Так нормально или какая - то проблема есть?
пробую сделать свой первый парсер по авито и вот столкнулся с проблемой ошибки 403-т.е авито палит парсинг и отказывает. Как решить проблему помогите( через requests не варик, через cURL тоже сейчас попробовал-тоже самое. Слышал про selenium, но это единственный вариант?
Нет никакой разницы, selenium-stealth это просто оболочка которая патчит основной Selenium, чтобы его не палили как автоматизацию. А селениум палят потому что у него и не было задачи обойти это, так как инструмент создан для тестирования сайтов, а не для автоматизации.
Только скажите, пожалуйста, я вот гражданин ЭрЭф и вот сейчас происходит очень сложная геополитическая ситуация, при которой нам, возможно, отключат эти вот западные интернеты ваши все Вот было бы видео, где вы бы объяснили, как вот попасть на различные ресурсы сети Интернет, которые находятся под ограничением, иначе говоря, заблокированы на территории определенной страны. Вот я просто не знаю, но, как говорят, существуют какие-то вот средства на три буквы (другие три буквы), которые позволяют вот это дело все обходить, как бы быть в одной стране, но этот компутер думает, что в другой, было бы очень здорово!
ZProger [ IT ], сейчас делаю автологгер аккаунт на сайт, можешь сказать как обойти блокировку за мультиаккаунты(2и более аккаунта на 1 сайте) Достаточно ли просто поменять прокси айпи и юзер агент? что можешь посоветовать сделать что бы обеспечить анонимность?
Очень важное код...спасибо )) а можно не каждий раз открыть хром...мы можем один раз открывать и в качестве индек.хтмл сохраним и дальнейшее с этим разбираться... Я с beautifulsoup написал но encoding ="cp1251" не работает...
здравствуйте, вылезла такая ошибка, подскажите, что делать ? MaxRetryError: HTTPConnectionPool(host='localhost', port=50115): Max retries exceeded with url: /serl (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))
@@zproger bet365 не дает залогиниться с селена стелс Причем раньше давала На санисофт показывает красным строки с webgl Можете дать совет как решить проблему?
@@zproger обычно на сайтах во всяких условиях использования написано что информацию можно использовать в личных целях, но не в коммерческих. На мой взгляд, это всё равно что прийти в магазин и брать там продукты просто так, тип они в открытом доступе - так не делают, потому что за это накажут. Жаль что людей останавливает не совесть, а угроза наказания
Согласен с вами, только в данном случае эти данные даже помогут админам сайта, так как заказчик по сути если и будет использовать их в коммерческих целях, то он будет и тем самым продвигать услуги на этом сайте, что принесет их владельцам прибыль.
Исходный код - t.me/codeblog8/112
На этом канале также публикуются полезные статьи,
не забывайте подписываться, чтобы не пропустить :)
Мужик, ты крут!!! 👍
Благодарю! Очень выручил!
СПАСИБО Автору за этот обучающий курс.
Своё изучение в Selenium я решил начать с этого курса и я рад тому что я смог первым делом найти именно его. Все рассказано понятным языком и к тому же ролики быстро и подробно показывают определённые аспекты в этом языке.
Интересно было бы увидеть, логику разбиения кода на файлы, создание классов и т.п. Спасибо за очередной урок. Лайк.
Спасибо, сделаю такое видео пожалуй
@@zproger - Подскажите есть ли такое видео?
@@zproger - Я сегодня завтра постараюсь разбить на структуры и очень хотел бы вашей оценки. Если вы не против)
Недавно вышло на канале: ruclips.net/video/SS8KtothcAQ/видео.html
@@zprogerривет, подскажи пожалуйста как решить проблему с закрытием браузера хром? Я написал банальный код что бы он просто его открыл, команды закрыть не давал. Где я только не искал решение этой проблемы , не могу найти 😢
Windows 10, использовал webdrivermanager
Спасибо большое, очень рад, что попал на этот канал
:)
Спасибо за информацию, очень понравилось.
😉
Как по мне идеальный формат видео (выполнение реальной работы) - вообще очень было интересно как говориться будни программиста посмотреть и какой код пишите в реале (как говориться хотелось бы прикоснуться к реальному продукту)
И поздравляю с видео больше 10 минут! Вот только такой формат и давайте, хоть покушать успеваю, а то за 5 минут еще остается
Понял принял :)
Спасибо ! Мужик ! У тебя самый крутой канал !
Благодарю
огонь, ловите лукас от СЕООНЛИ
Благодарю :)
Красавчик! Очень крутое видео, впрочем как и всегда 🙂
Было бы круто увидеть автоматизацию действий не в вебе, а просто на компе
Есть библиотека PyWinAuto, возможно дойдут до неё руки
и я сделаю видео :)
@@zproger о! Спасибо! Даже за направление спасибо, потому что пробовал через win32 + pyautogui, но wib32 почему то не работала, как в видосах... А pyautogui ну прям слишком топорно по пикселям вымерять...
@@zproger шикарно! Ждём когда дойдут руки до PyWinAuto!!
Благодарю автора за урок ! Для меня было очень интересно и познавательно...
Спасибо за видео! Сделай пожалуйста в следующем видео пример того, как можно спарсить номер на авито. Он представлен там как картинка. Через json авито подменяет номер из объявление, в итоге парсится совсем другой номер.
Впервые у вас. Учусь программировать. Пока даже не джун, потому ищу всю информацию, которая может помочь в развитии. Если позволите, дам немного критики: вы уж очень быстро некоторые моменты делаете, что я не успеваю понять, что конкретно произошло и почему надо так. Но эта придирка меркнет в сравнении с тем, насколько полезен был данный контент в целом. Пожалуйста, делайте больше таких видео. 299ый лайк+подписка
Автору огромное спасибо!
спасибо тебе за видео!
Не знаю кому как, а для меня это очень-очень залипательный канал... Автор, прошу снять видео по коду для накрутки лайков на Ютубе... Обязуюсь испытать на "кошках", а лайки накрутить на Ваш канал! Спасибо огромное за Ваш труд! Мое уважение!
Благодарю, рад что принес пользу
Отличное видео! рабочий group_size = driver.find_element(By.CLASS_NAME, "tourPage__container").find_element(By.CLASS_NAME, "tourPageRight").find_element(By.CLASS_NAME, "middle").find_element(By.CLASS_NAME, "size_group").find_element(By.CLASS_NAME, "right").text
Ни ваш вариант ни даже так не работает :( group_size = driver.find_element(By.CLASS_NAME, "tourPage__container").find_element(By.CLASS_NAME, "tourPageRight").find_element(By.CLASS_NAME, "tourPage__main__sidebar").find_element(By.CLASS_NAME, "middle").find_element(By.CLASS_NAME, "size_group").find_element(By.CLASS_NAME, "right").text
Вот это бомба, спасибо!
Благодарю :)
Очень познавательно и понятно объяснено. Но так и не удалось запарсить сайт магазина днс ) Какая-то навороченная защита у них
спасибо, отличное видео
> 5:32 ... в один файл хотя так делать не стоит ...
- хотелось бы, на самом деле, "как стоит" посмотреть
лево руля, уже был такой комментарий, ждём видео "как стоит"
Будет видео об этом :)
Там где парсили размер группы, и не работал просто text, можно сделать .get_attribute('innerText'). У меня так заработало, и никакой CSS_SELECTOR не потребовался
крутое видео
Спасибо
Наконец-то я нашел то, что долго искал - парсинг информации не только с листингов карточек, но и по ссылкам. Огромное спасибо за видео!
Хочу спросить, как такое же сделать с сохранением в CSV, а не в JSON?
используйте библиотеку pandas
Интересно было бы увидеть методы для обхода парсинга без использования Selenium. Так как он работает довольно медленно. Интересно было бы глянуть на какие-то опесорсы от программистов, которые нашли методы для обхода парсинга без использования эмулятора браузера
В итоге нашел что нибудь побыстрее?
Бы ло бы интересно посмотреть реализацию с авторизацией (возможно через сторонний сервис(Гугл, ВК, ОК и т.д) с решением капчи)
Хорошая идея, спасибо
Спасибо за видео! Если будет возможность и желание прошу рассказать как можно в selenium скролить страницу - бывают сайты, которые подгружают информацию по факту скрола.
Это можно сделать примерно так:
from selenium.webdriver.common.keys import Keys
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.DOWN)
js код исполняешь на скролл вниз и все
@@stoparb357 подробнее можно? или может пример есть?
Опыт мне подсказывает что там скорее всего было несколько классов size_group и надо было юзать find_element[S] и выбрать из списка. Css selector меняется чаще чем class name и его только на крайняк. И кстати, прежде чем юзать какой нить селектор или class_name, xpath и тд его лучше для начала в самом же браузере проверить. В хроме не знаю но в мазиле есть такая возможность.
Спасибо за развернутый комментарий, думаю и в JS консоли можно такое реализовать, но как-то не подумал об этом на тот момент, но идея хорошая
Я сейчас только учу это. Да, у меня есть много чему учится.
:)
Ответ найден) смотрите под комментарием)
Извините за назойливость, интересует один вопрос как при определении функции или класса аннотировать тип переменной :() ну вы поняли надеюсь суть вопроса)
Это для того чтобы методы IDE-шка подсказывала.
Заранее спасибо.
from selenium.webdriver import Chrome as Driver
class Parsing():
def __init__(self, response: Driver ):
self.res = response
тем самым мы аннотируем аргумент response объектом класса вебдрайверChrome - следовательно нам доступны все методы.
чтобы улучшить дедукцию читая текст задирай голову в верх чтобы слюни не мешали . и записывай короткими частями чтобы красивее казалось а не так как будто ты только что с пробежки . и прекрати пожалуйста выделять приставки "кы" и "Вы" там кстати нет ы !!! от тебя после 1 видоса бесит но блин настолько офигенный контент что просто спасибо и спасибо хочется говорить и несколько лайкосов поставить .
Спасибо xDD
Добрый день. Спасибо за видео.
Скажите , пожалуйста, я правильно понимаю что в видео вы парсите сайт не открывая при этом браузер?
А будут видео там где все распределено по файлам или классам, как делают опытные разработчики?
Да, сделаю обязательно
Спасибо попробую так спарсить сайт который не мог из за защиты
ну как, вышло?
Здравствуйте, классный урок, все получилось. А можно ли запускать такой скрипт на FTP сервере?
Трудно ли реализовать бота , который будет парсить сайты на товары которые очень трудно найти в наличии. Чтоб получать уведомления со ссылкой на товар когда он будет в продаже? Было бы круто иметь такого бота)).
Здравствуйте. Спасибо большое за видео, было очень познавательно, но скажите, пожалуйста, меня вот очень сильно заинтересовала эта вот оболочка стеалтх над селениумом, ведь стеалтх в переводе означает "скрытный". Вот скажите, пожалуйста, при разработке игры, где ты типа грибок и прыгаешь по супермарио можно ли грибочек сделать невидимым или скрытным, то есть дать ему оболочку стеалтх, чтобы вот геймплей был более завораживающим?!
Здравствуйте, всё верно xDD
Привет, спасибо за видео, где берешь заказы по фрилансу ?
Спасибо за фидбэк, заказчиков ищу в соц.сетях
когда дойдете до вывода print(titile) произойдет октрытие браузера с ошибкой 404
300 уже есть, даже 413 )) Думаю пора рассмотреть мультипроцесс, асинхронность и данную ошибку -
[0429/203926.357:ERROR:ssl_client_socket_impl.cc(999)] handshake failed; returned -1, SSL error code 1, net_error -101
Думаю у многих она есть, в инете есть опции которые типа скрывают ошибки, но нет )
Мультипроцессинг и потоки уже есть на канале, асинхронность пока только в планах :)
@ZProger [ IT ] Кстати, как тебе идея сделать видео про правильную разбивку кода на файлы, тип когда не всё в одном пишешь, а когда разбиваешь код на части и пихаешь его в разные файлы связанные друг с другом
Хорошая идея, как-то сделаю видос
подскажите возможно ли входить(авторизоваться) на сайт через запрос reqvest (используя selenium) и потом на сайте осуществлять клики?
Здравствуйте. Мы задались целью спарсить ОЛХ Узбекистана. Мы использовали datacool но программа ОЛХ распознает и блокирует нас. Скажите пожалуйста не могли бы вы используя тот механизм, о котором шла речь в видео сделать парсер для ОЛХ узбекистана?
Занимательная лекция!!)
Однако я столкнулся с проблемой: ERROR:ssl_client_socket_impl.cc(983)] handshake failed; returned -1, SSL error code 1, net_error -101
Cмотрел решение на стаке, но не помогло. Что я делаю не так?
А теперь это не работает выдает selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: Invalid parameters :-(
Здравствуйте как парсер видео в сайте если видео платный😊 такой урок можете сделать? Пожалуйста
Что за композиция 15:50?
Здравствуйте. У меня в окне браузера на долю секунды появляется красного цвета содержимое, а потом перекрашивается в зеленое. Так нормально или какая - то проблема есть?
пробую сделать свой первый парсер по авито и вот столкнулся с проблемой ошибки 403-т.е авито палит парсинг и отказывает. Как решить проблему помогите(
через requests не варик, через cURL тоже сейчас попробовал-тоже самое.
Слышал про selenium, но это единственный вариант?
А в чём разница с Selenium? То есть Селениум так плох, что ему нужна библиотека Стелс?
Нет никакой разницы, selenium-stealth это просто оболочка которая патчит основной Selenium, чтобы его не палили как автоматизацию. А селениум палят потому что у него и не было задачи обойти это, так как инструмент создан для тестирования сайтов, а не для автоматизации.
на 16:11 говорите что будете использовать старый не актуальный метод и не используете его, не понятно, почему ?
Только скажите, пожалуйста, я вот гражданин ЭрЭф и вот сейчас происходит очень сложная геополитическая ситуация, при которой нам, возможно, отключат эти вот западные интернеты ваши все
Вот было бы видео, где вы бы объяснили, как вот попасть на различные ресурсы сети Интернет, которые находятся под ограничением, иначе говоря, заблокированы на территории определенной страны. Вот я просто не знаю, но, как говорят, существуют какие-то вот средства на три буквы (другие три буквы), которые позволяют вот это дело все обходить, как бы быть в одной стране, но этот компутер думает, что в другой, было бы очень здорово!
Можно использовать VPN)
Я сейчас ахуел...
ZProger [ IT ], сейчас делаю автологгер аккаунт на сайт, можешь сказать как обойти блокировку за мультиаккаунты(2и более аккаунта на 1 сайте)
Достаточно ли просто поменять прокси айпи и юзер агент? что можешь посоветовать сделать что бы обеспечить анонимность?
Сайт может и по отпечаткам браузера палить, можно их тоже менять
@@zproger как скрыть отпечатки?
@@zproger и какие еще знаешь методы? если ответишь буду благодарен
эх, если бы cloudflare не мог обнаружить selenium...) я уже очень много времени бьюсь над этой проблемой
AttributeError: 'list' object has no attribute 'find_elements'
как ошибку исправить ?
может быть find_element ?
Странно что результат в json а не какой нибудь sql
А если это cloudflare защита
Есть библиотеки для обхода
@@zproger а для php ? Можно хоья бы название библиотеки...
Можем дать ссылку на нее?@@zproger
Очень важное код...спасибо )) а можно не каждий раз открыть хром...мы можем один раз открывать и в качестве индек.хтмл сохраним и дальнейшее с этим разбираться...
Я с beautifulsoup написал но encoding ="cp1251" не работает...
Интересный подход, спасибо
Как динамику парсить?
Вопрос. Почему парсит значения через раз? Всё правильно, ссылки парсит все, но title или же цену парсит через раз. Непонятно..
Вместо .text нужно использовать .get_attribute('innerText')
Не помогает, сайт блокирует доступ
здравствуйте, вылезла такая ошибка, подскажите, что делать ?
MaxRetryError: HTTPConnectionPool(host='localhost', port=50115): Max retries exceeded with url: /serl (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))
автор а можно парсер встроить в свой сайт
Ну да
Самое интересное и не показал: как правильно писать программу, выделять в отдельные классы и тд
Для этого сделаю другое видео :)
Увы, этот скрипт не пройдёт проверку bot detection на browserscan. Селениум стелс совсем не стелс.
selenium-stealth не работает на последних версиях селениум+гугл,, это стоит упомянуть я считаю
можно по подробнее, пожалуйста.
У меня при использовании selenium-stealth, пишет следующее "Сайт может не работать с VPN
вчера пробовал selenium webdriver тест пройшел@@ФроловМихаил-т4м
Эта библиотека мне не помогает в принципе. Сайт забанит в любом случае, если хорошая защита
Можете дать пример сайта, где эта библиотека не помогает? Попробую обойти защиту
@@zproger авито забанит я думаю
@@zproger bet365 не дает залогиниться с селена стелс
Причем раньше давала
На санисофт показывает красным строки с webgl
Можете дать совет как решить проблему?
Это же мой сайт!!!
Хи
серьёзно? :D
@@zproger нет, но было бы весело, если бы нашелся владелец сайта )
Ютуб с этой библиотекой работает через раз, хз почему. То попускает в акк, то выкидывает мол у вас браузер не безопасный, не могу понять в чем прикол
У ютуба очень жесткая защита в этом плане, может не прокатить
@@zproger Нашел решение))
Я пошол парсить openai
:)))
Это всё шляпа) cloudflare если не обходит
То смысла в этом бреде нет.
Теперь это жопашная жопа((( Гугл определяет и не дает авторизироваться. До жопы этот Стелс
Всë эта херня не рабочая. Попробуй напиши авторег фейсбука или протонмейл, я тогда поверю, а так ролик болтовня простая
Ну так это лишь инструмент, понятное дело что он не будет работать абсолютно для всех сайтов и обходить любой вид защиты.
Осуждаю воровство информации
Нельзя своровать то, что итак в открытом доступе
@@zproger обычно на сайтах во всяких условиях использования написано что информацию можно использовать в личных целях, но не в коммерческих. На мой взгляд, это всё равно что прийти в магазин и брать там продукты просто так, тип они в открытом доступе - так не делают, потому что за это накажут. Жаль что людей останавливает не совесть, а угроза наказания
Согласен с вами, только в данном случае эти данные даже помогут админам сайта, так как заказчик по сути если и будет использовать их в коммерческих целях, то он будет и тем самым продвигать услуги на этом сайте, что принесет их владельцам прибыль.
@@zproger а ок, я так далеко не мыслю((