Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/55: Рейтинг темы: голосов - 55, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
1

Извлечение кода из страницы WebView

26.03.2015, 09:49. Показов 10889. Ответов 50
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Есть страница загруженная WebView с кодом авторизации, который нужно использовать в приложении.
Как этот код можно извлечь из WebView программно?
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2015, 09:49
Ответы с готовыми решениями:

Доступ из HTML кода страницы, загруженной в WebView, к данным приложения
Возможно ли это? В частности, мне нужно передать джаваскрипту страницы версию установленного...

Зум страницы в webview
Есть простое приложение состоящее из webview, и возникает такая проблема, при попытке изменения...

Адрес страницы отображаемой WebView
Всем хаю-хай, скажите, как мне получить ссылку веб-страницы, которая в данный момент отображается у...

Не открываются страницы в WebView Android
У меня есть index.html, help.html, page_1.1.html, page_1.2.html. index.html - главная страница....

50
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
31.03.2015, 13:36  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Rube Посмотреть сообщение
Код из панели разработки браузера может не совпадать с исходным кодом страницы
Мне нужно изъять verifier code со станицы. Скриншот превью страницы и исходного кода в начале темы. Там нужный мне код идентичен в обоих случаях.
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
31.03.2015, 13:53 22
Вот тебе для примера POST запросец на авторизацию для joyreactor

Кликните здесь для просмотра всего текста
Hypertext Transfer Protocol
POST http://joyreactor.cc/login HTTP/1.1\r\n
[Expert Info (Chat/Sequence): POST http://joyreactor.cc/login HTTP/1.1\r\n]
Request Method: POST
Request URI: http://joyreactor.cc/login
Request Version: HTTP/1.1
Host: joyreactor.cc\r\n
Proxy-Connection: keep-alive\r\n
Content-Length: 138\r\n
Cache-Control: max-age=0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n
Origin: http://joyreactor.cc\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Referer: http://joyreactor.cc/login\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4\r\n
[truncated]Cookie: _ga=GA1.2.954934144.1426171673; __utma=181923772.954934144.1426171673.1426171673.1426253268.2; __utmz=181923772.1426171673.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); showVideoGif3=1; joyreactor=ver3d64ecd7043aa4
\r\n
[Full request URI: http://joyreactor.cchttp://joyreactor.cc/login]
[HTTP request 1/1]
[Response in frame: 32]
HTML Form URL Encoded: application/x-www-form-urlencoded
Form item: "signin[username]" = "username"
Form item: "signin[password]" = "password"
Form item: "signin[remember]" = "on"
Form item: "signin[_csrf_token]" = "ff37ead1f636ce6ab5aada5d2b5ffedc"


Добавлено через 11 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 String page_url = "some_url";
        Connection con = Jsoup.connect(page_url).timeout(DEFAULT_TIMEOUT);
        con.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        con.header("Cache-Control", "max-age=0");
        con.header("Accept-Encoding", "gzip, deflate, sdch");
        con.header("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
        con.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");
        Document doc = null;
        try {
            doc = con.get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String token = "";
        if (doc != null)
            token = doc.select("body").html();
что-то вроде такого тебе надо
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
31.03.2015, 15:13  [ТС] 23
Цитата Сообщение от fgtmenow Посмотреть сообщение
что-то вроде такого тебе надо
ну да, что-то вроде такого.

А если точно , то мне нужно

1.отправить get запрос вида

Код
http://demo.weteam.biz/oadmin/oauth_authorize?oauth_token=f6f09355c0060db7da868a3d49c3a1e2
2. Получив и заполнив форму логин-пароль, отправить post запрос.

3. Получив страницу с кнопкой submit, подтвердить запросом get и получить страницу, с которой и нужно изъять verifier code.
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
31.03.2015, 15:31 24
это хорошо, когда ты знаешь что тебе нужно) будут вопросы - обращайся)
2
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 00:48  [ТС] 25
Цитата Сообщение от fgtmenow Посмотреть сообщение
будут вопросы - обращайся)
да собственно, сейчас это и есть пока вопрос -- составление запроса get и post средствами java.
разбираюсь...

Добавлено через 14 минут
нашел пример
буду пробовать

Добавлено через 7 часов 4 минуты
Цитата Сообщение от fgtmenow Посмотреть сообщение
будут вопросы - обращайся)
после первого запроса get получаю нужную строку типа
Код
MYURL?oauth_token=a4001969c0a46837d12f3768363a039d
его можно извлечь из ответа напрямую, методом типа
Java
1
String token = .......getData("oauth_token");
, или нужно парсить строку?
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
01.04.2015, 00:50 26
думаю и так и так можно, как тебе проще так и реализуй. главное чтоб универсально было
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 08:57  [ТС] 27
Код
http://myURL.com/oadmin/oauth_authorize?oauth_token=f6c22c6cf6a6ce6839c392f4b3813985
как jsop извлечь "oauth_token"?
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
01.04.2015, 09:41 28
Java
1
2
int start = url.indexOf("oauth_token=");
String token = url.substring(start+12);
Добавлено через 1 минуту
это работа со строкой, ну же)
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 12:10  [ТС] 29
а, ну понятно.

просто я ищу метод, которым непосредственно jsoup может изъять параметр с именем "oauth_token" из объекта String (в данном случае -- полученный url)
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
01.04.2015, 13:10 30
лично мое мнение, что если задачу можно решить просто - то лучше решать ее просто
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 14:40  [ТС] 31
Цитата Сообщение от fgtmenow Посмотреть сообщение
если задачу можно решить просто - то лучше решать ее просто
я и предполагал, что получить данные из объекта по имени этих денных -- это просто. )

Добавлено через 46 минут
HTML5
1
2
3
4
5
<script type="text/javascript">
   ................
   ...............
    var FORM_KEY = 'gaWM5idwEX8wl9Fv';
</script>
как изъять переменную FORM_KEY, используя парсинг jsoup?
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
01.04.2015, 15:00 32
аналогично с адресной строкой,

Java
1
document.select("head").html().substring(  document.select("head").html().indexOf("var FORM_KEY = '")+17,document.select("head").html().indexOf("</script>"))
ну ты там допили чтоб работало
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 15:48  [ТС] 33
допилил, достал form_key

теперь, получая страницу с логин-паролем, отправляю post-запрос, в post data параметры
form_key
login[username]
login[password]
oauth_token

те же параметры шлет в оригинале и браузер в post data.

в ответ получаю ту же самую страницу - с полями логин-пароль.
что не хватает сформированному мною post запросу? может, куки?
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
01.04.2015, 20:22 34
ну для начала в теме не хватает кода твоего
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 21:07  [ТС] 35
ну для начала в теме не хватает кода твоего
Приведу его фрагменты

метод, который непосредственно выполняет запрос POST
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public String sendPost(String targetURL, QueryString query) throws MalformedURLException, IOException{
 
        URL url;
        HttpURLConnection connection = null;
 
        try{
            
            url = new URL(targetURL);
        
            connection = (HttpURLConnection)url.openConnection();
 
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
        
            DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
            wr.writeBytes(query.toString());
            wr.flush();
            wr.close();
        
            InputStream is = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
            String line;
            StringBuilder response = new StringBuilder();
 
            while((line = rd.readLine()) != null) {
 
                response.append(line);
                System.out.println(line);        
                response.append('\r');
            }
            rd.close();
            return response.toString();
 
        } catch (Exception e) {
 
            e.printStackTrace();
            return null;
 
            } finally {
 
            if(connection != null) {
                connection.disconnect();
                }
            }
        }
Класс QueryString

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class QueryString {
    private StringBuffer query;
    
    public QueryString(Object name, Object value) throws UnsupportedEncodingException{
            add(name,value);
    }
    
    public QueryString() {
        query = new StringBuffer();
    }
    
    public synchronized QueryString add(Object name, Object value) throws UnsupportedEncodingException{
 
        if (!query.toString().trim().equals("")) query.append("&");
        query.append(URLEncoder.encode(name.toString(), "UTF-8"));
        query.append("=");
        query.append(URLEncoder.encode(value.toString(), "UTF-8"));
        return this;        
    }
    
    public String toString(){
    return query.toString();
    }
    
}

Подготовка query и вызов метода POST

Java
1
2
3
4
5
6
7
8
QueryString postQuery = new QueryString();
 
        postQuery.add("form_key", formKey);
        postQuery.add("login[username]", login);
        postQuery.add("login[password]", password);        
        postQuery.add("oauth_token", requestToken);
 
myConnectionClass.sendPost(myAuthorizationUrl, postQuery);
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
02.04.2015, 00:03 36
приведи еще содержимое пакета уровня TCP, когда авторизуешся с браузера, потмоу что с виду все впорядке... а значит чего-то не хватает
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
02.04.2015, 00:36  [ТС] 37
Цитата Сообщение от fgtmenow Посмотреть сообщение
содержимое пакета уровня TCP
Это POST Data?

Добавлено через 13 минут
Как-то сильно мудрено получается...
Может, использовать все-таки браузер android для отправки запросов.
А в конце, когда verifier code уже присутствует в коде загруженной страницы, изъять его оттуда в приложение.
У webview методов для изъятия html нет, как я понял. А другие браузеры android?
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
02.04.2015, 10:21 38
в одном проекте я через JavascriptInteface работал с кодом через Webview, тоже неплохое решение

Добавлено через 7 минут
но webview работает только а ui потоке, придётся исхитриться чтобы его спрятать для пользователя. сейчас примерчик поищу как реализовать саму работу

Добавлено через 13 минут
ну вот например есть у нас активити с webview

в oncreate имеем:

Java
1
2
3
4
5
6
7
8
WebView mWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadsImagesAutomatically(false);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36");
addInterface();
метод addInterface();

Java
1
2
3
4
5
6
7
8
9
  void addInterface() {
        mWebView.removeJavascriptInterface("HTMLOUT");
        class JavaScriptInterfaceGetHtml {
            public void getHTML(String s) {                           
                    Log.d("getHTML", "" + s);  
            }          
        }
        mWebView.addJavascriptInterface(new JavaScriptInterfaceGetHtml(), "HTMLOUT");
    }

и теперь, когда надо получить html код страницы - вызываем
Java
1
mWebView.loadUrl("javascript:window.HTMLOUT.getHTML('<head>'+document.getElementsByTagName('HTML')[0].innerHTML+'</head>');");
и html код подается входным параметром в метод getHTML(String s) класса JavaScriptInterfaceGetHtml
1
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
02.04.2015, 12:26  [ТС] 39
т.е., правильно я понимаю, метод getHTML(String s) может, получив строку с html страницы, пропарсить ее, извлечь verifier code и передать его дальше по назначению?
0
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 256
02.04.2015, 13:02 40
ну да, на яве уже как хочешь извращайся со строкой. Но эту связку не легко заставить работать
1
02.04.2015, 13:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2015, 13:02
Помогаю со студенческими работами здесь

webView загрузка страницы. Не работает сигнал
ui-&gt;webView-&gt;load(QNetworkRequest(QUrl(&quot;http://m.facebook.com&quot;)), ...

Webview локальное приложение не открывает страницы
Хотел быстро запилить прожку для отправки веб запросов типа гет чтобы управлять железками в сети,...

Webview Веб браузер отображает некорректно страницы
Прощу прощение если тема не в теме и такое уже== правда искал не нашел Сразу хочу оговориться я...

Получить cookies из загруженной страницы в webview javafx
нужно в cookies найти параметр ssoid


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru