Ответ 1
Для простого взаимодействия вам не нужен такой инструмент, как Selenium, который будет записывать и воспроизводить запросы.
Вам нужны только те инструменты, о которых вы уже упоминали:
- В Chrome уже есть необходимые инструменты разработчика: используйте вкладку "Сеть" . Нет плагина для загрузки. Я не знаю, будет ли Safari работать - я не вижу вкладку "Сеть" в своих инструментах разработчика.
- Оба
curl
иwget
поддерживают файлы cookie и POST-данные, но я только пытался завивать для автоматизации.
Существует несколько ключевых шагов, которые необходимо выполнить правильно (это требует некоторого опыта):
- Последовательность запрошенных страниц должна моделировать взаимодействие реального пользователя. Это важно, потому что вы не знаете, как именно бэкэнд обрабатывает формы или аутентификацию. Здесь появляется вкладка "Сеть" в Инструментах разработчика Chrome. (Обратите внимание, что есть кнопка "запись", которая предотвратит очистку журнала.) Когда вы готовитесь к регистрации реального взаимодействия с пользователем для анализа, не забудьте очистите файлы cookie в начале каждой сессии.
- Вам необходимо использовать все подходящие опции
curl
иwget
, которые гарантируют надлежащую обработку файлов cookie и переадресаций. - Все поля формы POST, вероятно, будут отправлены (вы часто увидите поля с значениями nonce, чтобы предотвратить CSRF
Здесь приведен пример из 3 вызовов curl, которые я написал для автоматизации script, которые я написал для загрузки широкополосного доступа от моего провайдера:
curl \
--silent \
--location \
--user-agent "$USER_AGENT" \
--cookie-jar "$COOKIES_PATH.txt" \
'https://idp.optusnet.com.au/idp/optus/Authn/Service?spEntityID=https%3A%2F%2Fwww.optuszoo.com.au%2Fshibboleth&j_principal_type=ISP' >$USAGE_PATH-1.html 2>&1 && sleep 3 &&
# --location because the previous request returns with a series of redirects "302 Moved Temporarily" or "302 Found"
curl \
--silent \
--location \
--user-agent "$USER_AGENT" \
--cookie "$COOKIES_PATH.txt" \
--cookie-jar "$COOKIES_PATH.txt" \
--referer 'https://idp.optusnet.com.au/idp/optus/Authn/Service?spEntityID=https%3A%2F%2Fwww.optuszoo.com.au%2Fshibboleth&j_principal_type=ISP' \
--data "spEntityID=https://www.optuszoo.com.au/shibboleth&j_principal_type=ISP&j_username=$OPTUS_USERNAME&j_password=$OPTUS_PASSWORD&j_security_check=true" \
'https://idp.optusnet.com.au/idp/optus/Authn/Service' >$USAGE_PATH-2.html 2>&1 && sleep 1 &&
curl \
--silent \
--location \
--user-agent "$USER_AGENT" \
--cookie "$COOKIES_PATH.txt" \
--cookie-jar "$COOKIES_PATH.txt" \
--referer 'https://www.optuszoo.com.au/' \
'https://www.optuszoo.com.au//r/ffmu' >$USAGE_PATH-3.html 2>/dev/null
Обратите внимание на осторожное использование --cookie-jar
, --cookie
и --location
. sleep
s, --user-agent
и --referer
могут не понадобиться (бэкэнд не может проверять), но они достаточно просты, что я включаю их, чтобы минимизировать вероятность ошибок.
В этом примере мне повезло, что не было динамических полей POST, например. anti-CSRF, которые мне пришлось бы извлечь и передать на последующий запрос. Это потому, что эта автоматизация предназначена для аутентификации. Для автоматизации других типов веб-взаимодействий после того, как пользователь уже зарегистрировался, вы, вероятно, столкнетесь с большим количеством этих динамически генерируемых полей.