Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Парсинг сайта на Java после всех манипуляций с javascript

#java #парсер


Можно ли каким-нибудь образом спарсить всю страницу так, чтобы все элементы создаваемые/изменяемые
javascript'ом были видны после загрузки страницы? И была возможность запускать эти
скрипты с параметрами. Объясню, допустим есть на сайте текстовое поле с id="itemname"
и кнопка с id="submit". Я к примеру пишу  

Element field = getElementById("itemname");
Element button =getElementById("submit ");
field.setText("Кофта");
button.press();


И он мне выводит javascript генерированный документ. 
То есть это тоже самое как я например зашёл в интернет магазин, в поле поиск (С id
itemname) написал "Кофта" и нажал кнопку (С id submit) 

Создавать WebView и по координатам кликать мне кажется не правильное решение. Ещё
где-то видел библиотеку (Не помню как она называется, вроде начинается на 'S'), но
мне кажется - это не то, что нужно мне. 

Либо авторизация в всплывающем окне то же по такому же принципу без протокола :javascript

Если кто-то не понял, например. Я пишу программу на Java, которая будет уведомлять
меня в трее Windows что на мой ruSO пришел новый ответ. Новый ответ должен парситься
из значка вверху сайта (Если нету пустой, если есть то добавляется новый класс к DOMу
значка --не знаю как сделано на этом сайте, все примерно--). Но чтобы узнать есть ли
у меня сообщения, программа должна скормить серверу мой логин и пароль через JS, а
после, в отрендеренной странице, найти те самые значки.
    


Ответы

Ответ 1



То, что вы ищете, называется Selenium WebDriver. Ваш пример с "Кофтой" будет выглядеть примерно так: import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; WebDriver driver = new FirefoxDriver(); driver.get("http://www.example.com"); driver.findElement(By.id("itemname")).sendKeys("Кофта"); driver.findElement(By.id("submit")).click();

Ответ 2



То что я искал называется Headless browser, то есть браузер без визуализации. Для java есть htmlunit. Ссылка на список "Безглавых браузеров" на enSo

Ответ 3



У меня на библиотеке JSOUP все получилось: String url = "https://ru.stackoverflow.com/users/login"; String login = "mylogin@sobaka.gav"; String password = "password"; // Вот и вся авторизация.... Connection conn = Jsoup.connect(url); conn.data("email", login); conn.data("password", password); Document doc = conn.userAgent("Mazilla i t.d.").post(); Elements net_items = doc.getElementsByClass("unread-count"); String mess_and_rep = net_items.text(); System.out.println(mess_and_rep); //Получился результат: +10

Ответ 4



Вы можете в WebView скормить javascript после загрузки страницы. К примеру, если хотите заполнить Ваше поле id="itemname": String itemname= "Кофта"; webview.loadUrl("javascript:document.getElementById('itemname').value = '"+itemname+"';"); Аналогично и для всего остального, пишете что необходимо и в webview.loadUrl("javascript:...

Комментариев нет:

Отправить комментарий