LINUX.ORG.RU

Тупой вопрос про использование куков во wget

 , , ,


0

1

Здравствуйте.

Есть башскрипт, его задача - страничку по расписанию с сайта wget'ом таскать, текст из неё вынимать и вслух его читать. Некоторое время назад работать перестал. В терминале выхлоп: 403: Forbidden (сайт под CloudFlare, к сожалению).

В браузере сайт спокойно открывается, потому, что я там капчу уже нажимал, и куки позволяют свободный проход. Я попробовал рецепт:

Да, /tmp/cookies.txt успешно сформировался. Да, если погрепать его по имени сайта, то выхлоп непустой. Да, «wget --load-cookies=/tmp/cookies.txt -O - $url» отыграло без ошибок. Нет, выхлоп вот этой вот команды по-прежнему ERROR 403: Forbidden.

Я подумал: может firefox как-то можно запустить, чтоб он без формирования интерфейса просто обработал url и выдал результат (то, что я в Code Inspector'е вижу) в stdout. Попробовал покурить firefox headless mode в надежде на то, что вот это вот то, что мне надо, но погрузился в ужасные дебри питона и селениума, которые мне колхознику очень плохо понятны и кажутся пушкой по воробьям.

Подскажите, пожалуйста, возможность как-то всё-таки затягивать подобное командной строчкой в stdout для последующего парсинга и прочего.

Спасибо за внимание.

★★★★★

Последнее исправление: piyavking (всего исправлений: 1)

wget-ом ты такие сайты не откроешь, никак. Неужели ты думаешь что он отличается от браузера только юзер-агентом и куками?

Я подумал: может firefox как-то можно запустить, чтоб он без формирования интерфейса просто обработал url и выдал результат (то, что я в Code Inspector'е вижу) в stdout.

firefox без интерфейса можно, но в stdout нельзя. Чтобы забрать контент, к файрфоксу надо прицепить проксю (изучай Си, если ещё нет), которая честно даст ему сделать всё что хочет он и хочет от него сайт, но данные страницы просниффит и куда-нить сохранит. Митмфлар проксю конечно же тоже спалит и будет очень часто сувать свои капчи, но по крайней мере остальное можно будет не делать вручную.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Там, наверное, не только user-agent нужно, а вообще весь заголовок, host и всё остальное.. И не проще ли найти другой источник нужной информации?

ps1h ★★★
()

погрузился в ужасные дебри питона и селениума

Что там сложного?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get("http://www.python.org")
elem = driver.find_element(By.NAME, "q")
gruy ★★★★★
()
Последнее исправление: gruy (всего исправлений: 1)

CloudFlare занимается тем, что монополизирует Интернет под один браузер. И использует лютый фингерпринтинг для того, чтобы никакой программный код, кроме кода браузера за которым в реальном времени находится живой человек, не смог попасть на сайт.

Да, пока ещё наверное можно это обойти, но только временно. Гайки закручивают с каждым годом всё сильнее.

Для обхода есть инструменты, но т.к. не занимаюсь давно скрейпингом, не могу вспомнить название. Попадались где-то недавно в обсуждениях политики CF на HN, но прочитал и сразу же забыл.

Chiffchaff
()
Ответ на: комментарий от gruy

Не иcключаю, что попробую. Хотя узнавать что-то новое ужасно лень, но, видимо, придётся.

Так оно, насколько я понимаю, и должно сделать то, что мне нужно: вывалить в консоль содержимое вкладки «Inspector» браузерного окна «Developer Tools», если всё предельно педантично изложить?

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 2)

в firefox открываешь inspector -> network, грузишь сайт, находишь нужный запрос, пкм, copy value -> copy as curl. Дальше методом исключения ищешь какие серверу нужны заголовки. Куки обычно не одноразовые и долго живут. selenium нужно использовать, когда сервер делает сложные антибот проверки через javascript.

arrecck ★★★
()
Ответ на: комментарий от arrecck

CF давно умеет детектить такие примитивные вещи. У них используются более продвинутые способы фингерпринтинга UA. Например, фингерпринтинг SSL: как-то основывается на том, что браузеры все по-разному реализуют SSL, есть какие-то тонкие различия в реализации (в детали не вникал), которые на 100% достоверно позволяют отличить curl/wget от FF и Chrome.

Есть и инструменты, которые позволяют обойти SSL фингерпринтинг, предлагаю искать их самостоятельно. Но понятно, что это борьба брони и снаряда: сегодня сработает, завтра уже нет.

Chiffchaff
()
Ответ на: комментарий от piyavking

вывалить в консоль содержимое вкладки «Inspector» браузерного окна «Developer Tools»

Зачем всё? Можешь вытащить только нужный блок со страницы, по XPATH или ID, или названию css класса.

gruy ★★★★★
()

В фф есть опция - скопировать как curl, которая копирует твой запрос из браузера и один в один делает из него команду курл. Может это тебе поможет?

Slack ★★★★★
()