Задача состоит в том, чтобы передать страничке элементы и получить назад вернувшиеся данные. Для я пробовал использовать Jsoup, а затем HtmlUnit. Проблема заключается в том, что с помощью и той и другой библиотеки, получается вернуть чистый HTML-код в котором отсутствуют некоторые элементы.
Результат работы кода:
HtmlDivision[<div id="mod_dlg_0" class="hide information pnl-info">]
То что должен видеть (аттрибут display):
Идея заключалась в том, чтобы передать методом POST данные, и проверить изменилось ли значение display с none на block. Реализация:
WebClient webClient = new WebClient();
webClient.getOptions().setCssEnabled(true);
WebRequest requestSettings = new WebRequest(new URL(
"http://npchk.nalog.ru/index.html"), HttpMethod.POST);
requestSettings.setRequestParameters(new ArrayList());
requestSettings.getRequestParameters().add(new NameValuePair("inn", "7731347089"));
requestSettings.getRequestParameters().add(new NameValuePair("kpp", "773101001"));
HtmlPage page = webClient.getPage(requestSettings);
webClient.waitForBackgroundJavaScript(30 * 1000);
HtmlDivision div = page.getHtmlElementById("mod_dlg_0");
System.out.println(page.asXml());
System.out.println(div.toString());
1) Есть ли какой-то метод, которые поможет решить эту проблему?
2) Может стоить попробовать использовать какие-то другие библиотеки?
3) Возможно Вы знаете какие-то более простые решения задачи? Адрес HTML страницы: http://npchk.nalog.ru/index.html
Смог решить вопрос с помощью silenium библиотеки. К сожалению работает она не всегда быстро и скачивание файлов не смог осуществить через PhantomDriver, только через ChromeDriver, который работает только открывая окно браузера Chrome.
WebDriver webDriver = new PhantomJSDriver(caps);
webDriver.get("http://npchk.nalog.ru/index.html");
inn = contractor.getInn();
kpp = contractor.getKpp();
date = contractor.getDt();
StringSelection selection = new StringSelection(inn);
StringSelection selectionkpp = new StringSelection(kpp);
StringSelection selectiondate = new StringSelection(date);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
webDriver.findElement(By.id("inn")).sendKeys(Keys.CONTROL + "v");
if (!(kpp.equals("000000000"))) {
clipboard.setContents(selectionkpp, selectionkpp);
webDriver.findElement(By.id("kpp")).sendKeys(Keys.CONTROL + "v");
}
clipboard.setContents(selectiondate, selectiondate);
webDriver.findElement(By.id("dt")).sendKeys(Keys.CONTROL + "v");
webDriver.findElement(By.xpath("//*[@id=\"content\"]/form/div[4]/div/div[10]/button")).click();
WebDriverWait wait = new WebDriverWait(webDriver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"content\"]/form/div[3]")));
Thread.sleep(1000);
В данном случае он возвращает элемент страницы после выполнения скриптов, полностью имитируя браузер.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Решил изучить один проектТам вот такое обращение к БД(MySQL) и конфиг
Имеется класс, в котором есть поле Path directory; и метод, который возвращает список объектов - List getAllStorted
Пишу свою реализацию потокобезопасного эррэй листа на CAS-блокировках (не спрашивайте зачем)Столкнулся с некоторым непонятным мне поведением...
Есть такая проблемкаВыводится какое-то кол-во яндекс карт, сейчас 3, в цикле