как нажать на кнопку через java?
-
18-09-2019 - |
Вопрос
Я хочу получить доступ к формам на страницах HTML через язык программирования Java без использования реального браузера между ними.
В настоящее время я делаю это через HTML-ЮНИТ но загрузка страницы занимает немного больше времени.Когда дело доходит до доступа к миллионам страниц, то это дополнительное время имеет наибольшее значение.
Есть ли другие методы для этого?
Решение
Я использовал что-то подобное под названием httpunit раньше, но я понятия не имею, как можно сравнить производительность.
Если вам нужно обработать миллионы страниц, я бы рекомендовал добавить еще несколько потоков.Просто предположение, но я думаю, что если вы масштабируете это до нескольких потоков, вы исчерпаете пропускную способность раньше, чем у вас закончится мощность процессора (в этом случае не имеет значения, насколько быстрее это может быть).
Другие советы
Доступ к веб-странице с помощью браузера, даже HtmlUnit, будет медленным.Лучшим методом является протестируйте слой чуть ниже веб-интерфейса, так что вам не нужно получать доступ к миллионам страниц — вместо этого вы тестируете достаточно, чтобы убедиться, что веб-интерфейс правильно использует нижний уровень.
Большая часть взаимодействия в браузере сводится к HTTP GET или HTTP POST.Вам нужно точно определить, какая операция вам нужна, а затем вы сможете создать URL-адрес и/или данные формы. Тогда вы можете использовать что-то вроде этого:
try {
//Construct data
String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
// Send data
URL url = new URL("http://hostname:80/cgi");
URLConnection conn = url.openConnection(); conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line; while ((line = rd.readLine()) != null) {
// Process line... }
wr.close();
rd.close();
} catch (Exception e) { }