Як - натискати - кнопку html форми з коду - обговорення та вирішення проблем - форуми на

Є HTML форма, що складається з текстбокса і кнопки. При натисканні на кнопку проводиться обробка даних, введених в текстбокс, і повернення результатів в таблицю, оформлену на цій же сторінці.
Завдання - програмно ввести в текстбокс значення, програмно натиснути на кнопку, пропарсіть результат з таблиці на цій же сторінці в рядок або масив в проге.
З парсинга "статичних" хтмл розібрався. Питання в тому, чи можна програмно заповнювати текстбокс, натискати кнопку, а також як парсити хтмл який в результаті виходить після того як ДжаваСкрипт відпрацював адже за посиланням початкової буде початковий хтмл на якому кнопка не було натиснуто і дані не введені.

Парсинг здійснюю за допомогою JSOUP бібліотеки, можу код привести.
На даний момент основні 2 проблеми - це програмне взаємодія з органами управління та як забрати хтмл потім який виходить після введення і натиснення кнопки ..

Якщо є рішення по простіше, мну новічог)

"Рішень по-простіше" немає.
1) Якщо потрібно вставити дані і натиснути кнопку - пишіть потрібний JS скрипт і Інжект його в WebView після читання сторінки
2) HTTPClient'ом Новомосковскете сторінку і Парс її, якщо весия після 8 можете WebView зберегти веб архів результат і з ним працювати

Величезне спасибі за відповідь.
Щодо Інжект ніби-б зрозумів, тобто я прсото годую скрипт як посилання webView елементу при відкритій сторінці яку треба парсити і він повинен спрацювати. я спробую, дякую.
Щодо другого не зовсім зрозумів. Наскільки я зрозумів для парсинга потрібна результуюча сторінка, вона буде перебувати в webview після того як виконаний скрипт або вручну натиснута кнопка. як його звідти дістати? Версія додатка значення не має, якщо треба - буде 8ая, це 1 рядок в маніфесті поміняти і норм Коротше, можна приклад з приміщенням вмісту поточного webview в будь-якої вебархів як ви говорите і якусь літературу для роботи з ним? В інтернеті не знаходив прикладів таких речей ..
І ще, якщо я Парс JSOUP бібліотекою, вона проста і зручна, я можу якось їй згодувати сторінку з вебархіва або й зовсім без приміщення в вебархів просто поточну сторінку webview, щоб отпарсіть її? Чи обов'язково використовувати HTTPClient?

а якщо з'ясувати який там генерується запит при натисканні на кнопку і формувати його самого? зразок простіше нікуди.

Угу, перехоплюєте новий урл і запускаєте асінктаск для отримання контенту з урла за допомогою клієнта.
З вебвью Ви простим шляхом не отримаєте вже завантажений контент

а якщо з'ясувати який там генерується запит при натисканні на кнопку і формувати його самого? зразок простіше нікуди.

Це я розібрався вже. Я просто визначаю коли вихідна сторінка перестає завантажуватися і потім wv.loadUrl ( "java script: document.getElementById ( 'Name'). Value = '3';");
і функцію тієї кнопки, на яку я натискаю, це працює. Начебто. Тут питань немає =)
В результаті я отримую таблицю, яку треба парсити в вебвью елементі.

Угу, перехоплюєте новий урл і запускаєте асінктаск для отримання контенту з урла за допомогою клієнта.

1) Чето я Вас не розумію скрипт звідкись бере дані для таблиці - у вас що Ajax сторінка? - якщо так - колупайте самі - Вам ніхто не допоможе, занадто багато конкретностей і тонкощів.

Зробив # 33; Досить простим шляхом отримав вихідний код сторінки, яка знаходиться в даний момент в webview в форматі String і пропарсіл рядок JSOUPом. Це вин.
Сторінка - це форма, сабміт якої формується ДжаваСкрипт. Зокрема та річ, яку треба пропарсіть формується саме ДжаваСкрипт і поміщається в таблицю.

Спочатку описується пікчалістенер, в якому перевіряємо чи завантажені картинки на сторінці (тому що картинки вантажаться довше, ніж текст - це 100% гарантія того, що сторінка завантажена повністю і можна Інжект скрипти)
wv.setPictureListener (new MyPictureListener ();

Подія завантаженої сторінки в класі MyPictureListener:

public void onNewPicture (WebView view, Picture arg1) if (i == 0)
wv.loadUrl ( "java script: document.getElementById ( 'Name'). value =" + nom_graf + ";");
if (i == 1)
wv.loadUrl ( "java script: ПолучітьСотрудніков ();");
if (i == 3)
wv.loadUrl ( "java script: window.HTMLOUT.processHTML ( ''+ Document.getElementsByTagName (' html ') [0] .innerHTML +''); ");

i ++;
//Toast.makeText (getApplicationContext (), wv.getUrl (), Toast.LENGTH_SHORT) .show ();

Куди і Інжект скрипти один з яких на висновок результуючого хтмл-коду сторінки, який пізніше піддається парсинг. Оскільки сторінка в цілому перезавантажується 4 рази доводиться вручну відстежувати порядковий номер перезавантаження і забезпечувати щоб скрипти Інжект чітко 1 раз при оновленні сторінки, а не 100500 раз коли спрацьовує подія перезавантаження сторінки при програмному натисканні на кнопку наприклад або введенні інформації в текстбокс або відображенні таблиці або че ще. Цей момент мені не подобається. ненавиджу константи, але хз як по-іншому відловити коли саме який з скриптів виконався а який ні і в каокм стані сторінка знаходиться в даний момент.

@SuppressWarnings ( "unused")
public void processHTML (String html)
// process the html as needed by the app
Integer [] hello = new Integer [тисячі];
int kol_tabl = 0;

Document doc = Jsoup.parse (html);


Elements links = doc.select ( "td");

for (Element link. links)

try
hello [kol_tabl] = Integer.parseInt (link.text ());
kol_tabl ++;
>
catch (Exception e)
Log.v ( "notINT", link.text ());
// give an error or a default or something.
>

>
У підсумку цілі своєї досяг, хоч і з милицями і через одне місце, але досяг =)))
Терь у мене залишилося 2 питання.
Перший - треба якось по черзі викликати це все справа автоматично, щоб воно після парсинга однієї сторінки запускало наступну сторінку в тому ж webview.
Ось припустимо є функція readWebView () в якій я вантажу посилання для парсинга і задаю лістенер для Пікчу і ДжаваСкрипт інтерфейс в загальному саме тіло якщо я викличу по черзі цю функцію з різними аргументами типу
readWebView (0);
readWebView (1);
readWebView (2);
Те відкриється сторінка і буде пропарсена тільки 2, 0 і 1 цієї статті не будуть навіть відкриті. порядок виконання коду взагалі не зрозумілий і як це викликати, щоб воно по черзі працювало яхз.
І друге треба кудись цей вебвью засунути в фон або завантаження яку поверх нього намалювати і яхз чи можливо це чи працюватиме цей елемент якщо він не в фокусі додатки, якщо setcontentview НЕ воно, а інше в'ю наприклад.

Може мої ідеї будуть комусь корисні хе-хе, тому що про вебвью інформації в інеті як-то більше буде, ніж про перелічені нижче HTTPСlient, Гет # 092; Пост і т.п. або то я такої кривої не можу в гуглі знайти осудного опису для нубасей а подібні перекрутити з вебвью знаходжу.
Відповісте на 2 питання моїх буду вдячний

Гаразд познущалися і вистачить - якщо серйозно з приводу завантаження в фоні - підказка "Visible.GONE". А по-перше зауваження питання Вам у веб сторінки в вебвью є 3 стану - початок завантаження, кінець завантаження і помилка завантаження, перехопити їх можна через WebViewClient, думаю буде простіше ніж через MyPictureListener.

Хоча особисто я Вам співчуваю писати обгортку на чужу сторінку це щось ;-)

Гаразд познущалися і вистачить - якщо серйозно з приводу завантаження в фоні - підказка "Visible.GONE". А по-перше зауваження питання Вам у веб сторінки в вебвью є 3 стану - початок завантаження, кінець завантаження і помилка завантаження, перехопити їх можна через WebViewClient, думаю буде простіше ніж через MyPictureListener.

Знущайтеся скільки завгодно, лише б на питання відповідали справно. Хоч і знаючи англійську мову на належному рівні іноді не знаєш в яку сторону копати і який запит Гуглу дати, тут то ви і виручаєте. =)
Завантаження в фоні реалізував, тільки ось Visible.GONE не працює, замість нього Visible.INVISIBLE поюзати, але все одно спасибі за стусан у вірному напрямку. Що стосується 3 станів вебвью, я знаю, я так і пробував спочатку, але у мене не вийшло, чи не вантажилася частина скриптів, підозрюю, що скрипти починали грузиться до того як сторінка буде завантажена повністю. Я використовував OnPageFinished (), ось таке ось:
wv.setWebViewClient (new WebViewClient ()

public void onPageFinished (WebView view, String url) wv.loadUrl ( "і тут якийсь скрипт");
>
>);
Тільки думаю, що буде те ж саме, що і з пекучий - коли я виконую скрипт, навіть циферку в текстбокс заношу все одно спрацьовує подія onPageFinished і доведеться ті ж константні речі робити, що я привів вище, щоб якось зрозуміти коли саме спрацьовує це подія і забезпечити едінократно інжект скрипта, інакше буде 100500 раз один і той же скрипт виконуватися, що дуже коряво. = (

І все-таки колупаю помаленьку HTTPClient, думаю доведеться все-таки переробити як ви говорите, якщо розберусь звичайно. Будуть питання - спершу)