Доброго времени суток.
Интересуют следующие вопросы:
1) Как работать с Elements, а именно: как доставать оттуда ссылки в отдельный string.
2)В универе развернута опытная wi-fi сеть с авторизацией для того, что бы научить горе студентов(меня в.т.ч.) делать быстрые, оптимизированные веб-приложения и т.д. т.п. При подключении к этой сети можно либо подождать на черной странице 20 секунд, либо перейти по определенной ссылке, которая подгружается в html с помощью js на основную страницу авторизации, при переходе по этой ссылке дается доступ в интернет, задание в том, чтобы прошло максимально мало времени от момента подключения к сети до момента получения доступа в интернет. Это предыстория. То есть передо мной стоит задача распарсить основную страницу авторизации, получить эту ссылку и перейти по ней. (как же все просто на словах, аж диву даешься). Что я знаю из того, как и что мне надо делать, мне надо подключиться к странице, дождаться ее полной загрузки, затем в AsyncTask распарсить ее, найти нужную мне ссылку (их несколько, но в нужной присутствует некие несколько кодовых символов в определенном порядке), затем передать эту ссылку отдельным string(про это 1 вопрос) обратно из AsyncTask, загрузить эту страницу. Понятное дело прикрутив куки, setuseragent(если что-то еще забыл, подскажите, пожалуйста). Грубо говоря, предыстория ни к чему, надо просто зайти на сайт, на нем найти ссылку, по ней перейти. Что я упустил? Правильно ли я это понимаю "на пальцах/словах"? Есть ли у кого-нибудь примеры выковыривания из Elements в String? Есть ли у кого-нибудь примеры чего-то подобного описанному? Одинаковый ли будет эффект для сервера, если я перейду по ссылке, кликнув на нее или перейду на сайт описанным способом через парсер, не будет ли сервер ругаться, заного переправлять меня на страницу авторизации, etc?
Так же буду очень благодарен если кто-нибудь напишет мне в телеграм @mhlchm (https://t.me/mhlchm) и сможет ответить на парочку-тройку вопросов (обещаю не грузить сильно и не доставать), там просто намного удобнее. Спасибо.
Как работать с Jsoup в ютубе можно легко найти. Например вот хорошее видео парсинг Html
Например запрос на авторизацию
Connection.Response resp = Jsoup.connect("http://soft.ru").referrer("http://soft.ru").userAgent(userAgent)
.data("login", "operator", "password", "1234567")
.method(Connection.Method.POST).timeout(10000).execute();
Парсим полученный ответ Document doc = resp.parse();
находим элементЫ Elements elements = doc.getElementsByAttributeValue("class", "ticketDetailRow");
Теперь различные методы для сохранения результата в строку:
String phoneNumber = elements.get(1).getElementsByAttributeValue("class", "ticketDetailGrid3").get(1).getElementsByIndexEquals(1).attr("value");
Тут конечный метод attr(String str)
сразу возвращает строку. Но чаще приходится переводить результат строку методом text()
Elements comments = doc.getElementsByAttributeValue("name", "col12");
String comment = comments.get(comments.size() - 1).text();
В хроме браузере нажав F12 на вкладке elements
можно видеть код страницы. Еще проще навести курсор на, в Вашем случае, ссылку и нажав правой кнопкой мыши в меню выбрать Посмотреть код
Jsoup это браузер без визуализации, так что сервер не поймет ничего (наверно, если нет изощренных методов защиты).
Приведенный тут мною код для Jsoup для Java, точно такие ли методы для Jsoup на андроид я не знаю.
По поводу выполнения js: как я понял, после выполнения js интернет получен и дальше парсить ничего не нужно. Значит мы получаем переходим по страничке в Jsoup, находим ссылку и переходим по ссылке,но уже не в jsoup, а в webview, он перейдет и исполнит js. Но может случиться такое: в jsoup переходите по ссылке, парсите, переходите по второй ссылке в webview и тут он ругается, потому что это ссылка полученная другим браузером и ему нужны либо куки либо тот же userAgent, а то и вообще какие нибудь данные, которые выдала первая страница. Я бы на вашем месте сперва проверил что требует вторая страница сниффером или в том же самом хроме, там есть вкладка network. Вот вопрос в котором есть похожее решение, только там чуть сложнее. Как парсить данные из WebView
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как убрать header <?xml version="10" encoding="UTF-16"?> В какой момент времени необходимо применять Transformer? Возможно ли ставить источником и назначением...
Первый вопрос как можно вместо стандартных надписей в названиях шкалы, вставлять например фото (со сложной формулой) ? И второй вопрос: как...