Перейти к содержимому

Фотография

Мониторинг одной страницы с добавляющимся контентом

selenium webdriver java цикл Мониторинг chrome HtmlUnit

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 deeew

deeew

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Александр Климов

Отправлено 13 октября 2018 - 10:28

Здравствуйте!, сразу скажу, что не имею желания стартануть карьеру QA. Но у меня есть определенная задача, и потратив около 5 часов в DuckDuckGo(гугле) - вообще не приблизился к решению.(

Вроде я не крайне тупой, но все что пытался сделать с помощью частей кода выдернутых на разных форумах - не принесло вообще никакого результата.((

Может у кого будет время и желание помочь мне чем то, ниже опишу мое ТЗ.

 

Полопатив кучу инфы - я заинсталлил такой софт для своих нужд:

Selenium webdriver, Java JDK, Intellij IDEA, Python и хром браузер с экзешным chromedriver файлом.

Все вроде ок работает, но python не проверял т.к. вообще не знаком с ним и как он работать должен - я без понятия).

 

С помощью этого софта я наделся выполнить такую задачу:

Мне нужно залогиниться на сайте и на одной странице форума мониторить добавляющуюся инфу, которая появляется в новых сообщениях разных юзеров и при добавлении ними ссылок на внешний ресурс заданного типа, нужно чтоб Селен автоматически переходил по линку и открывал его в новой вкладке, доступной мне для просмотра, а сам оставался на изначальной странице и продолжал мониторить ее.

Скрипт должен быть цикличным, т.к. на сколько я понял, нет толковой реализации ожидания нового элемента. Опять же, начитавшись постов на форумах, я предполагаю, что это нужно реализовать через CSS выборку со страницы, т.к. есть еще фактор, что по линку перейти Селен как можно скорее должен, я думал для реализации задействовать "HtmlUnit", чтоб проверка и детект линков был быстрее и меньше грузил память. Форум отображается без JS вполне нормально.

 

Из всего, что выше описал у меня получалось только залогиниться!((, тем не менее, как мне кажется, вот что самое сложное и напрочь мне не понятное:

Как настроить чек линков таким образом, чтоб в следующем цикле не проверять тот контент, который уже был проверен?

Каким образом, когда заполнится текущая страница - осуществить переход проверки на новую страницу форума, как только она появится?, баттона "следующая" нету, только номера-линки снизу, в каждом цикле проверять цифру наверное не вариант, т.к. они будут меняться постоянно.

И возможна ли работа скрипта с HtmlUnit, или в фоновом процессе (без отображения окна браузера), а результат открытых ссылок получать в виде открытых пользовательских страниц, а не просто логов с адресами?

 

В общем пока за все хватаюсь и вообще никак не могу реализовать даже часть задач, а свободного времени, чтоб уделить этому - просто нету. Начиная с азов потратить на изучение всех базовых структур еще пару недель не вариант.(

Потому буду крайне признателен за любую помощь, подсказку, или линк на подобные рабочие примеры, но ссылки на обучение с нуля, или обзор функционала думаю не стоит кидать, я просмотрел их очень не мало.

На Вашу помощь конечно очень надеюсь, но понимаю, на сколько такая просьба может быть не к месту!)


  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 14 октября 2018 - 09:34

а в чем проблема описать это ТЗ любому знакомому программеру или студенту, он и напишет вам программу за пару вечеров?

 

да, тут эта просьба не к месту


  • 0

#3 deeew

deeew

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Александр Климов

Отправлено 14 октября 2018 - 10:03

а в чем проблема описать это ТЗ любому знакомому программеру или студенту, он и напишет вам программу за пару вечеров?

 

да, тут эта просьба не к месту

Так я не просил написать мне скрипт, мне нужна идея, для реализации, чтоб например обрабатывать определенные страницы или ветки форума, но только по новым сообщениям и в реальном времени цикл не прекращающийся походу нужен. И возможно ли сразу обрабатывать несколько страниц?

Знакомых кодеров нету, а дузья, которые в QA - автоматизированным не занимаются.(

вот пока что есть, вход-выход...)

package host;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class FirstTest {
private static WebDriver driver;

@BeforeClass
public static void setup() {
System.setProperty("webdriver.chrome.driver", "D:/Jsoft/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://wmasteru.org/login");
}
@test
public void userLogin() {
WebElement loginField = driver.findElement(By.id("ctrl_pageLogin_login"));
loginField.sendKeys("deeew");
WebElement passwordField = driver.findElement(By.id("ctrl_pageLogin_password"));
passwordField.sendKeys("******");
WebElement login = driver.findElement(By.xpath("(//input[@value='Вход'])"));
login.submit();
}
@AfterClass
public static void tearDown() {
driver.get("https://wmasteru.org/logout");
WebElement logout = driver.findElement(By.xpath("//a[text()='Выход']"));
logout.submit();
driver.quit();
}
}

в середине, тело планирую начать с

driver.get("https://нужная страница");
WebElement element = driver.findElement(By.partialLinkText('какой то линк'));
element.click();

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


  • 0

#4 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 15 октября 2018 - 08:21

Как вариант - сделать статический список с линками (например, назвать его alreadyChecked).

Проверили линк - добавили в alreadyChecked.

Начали снова проверять набор линков - для каждого сначала смотрите, нет ли линка, который хотите проверить в alreadyChecked. Если есть - пропускаете, если нет - проверяете и добавляете.

 

п.с.: Java и Python - это разные языки программирования. Если выбрали Java, то Python Вам при описанном выше раскладе - не нужен вообще.


  • 1

#5 deeew

deeew

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Александр Климов

Отправлено 15 октября 2018 - 12:05

Как вариант - сделать статический список с линками (например, назвать его alreadyChecked).

Проверили линк - добавили в alreadyChecked.

Начали снова проверять набор линков - для каждого сначала смотрите, нет ли линка, который хотите проверить в alreadyChecked. Если есть - пропускаете, если нет - проверяете и добавляете.

 

п.с.: Java и Python - это разные языки программирования. Если выбрали Java, то Python Вам при описанном выше раскладе - не нужен вообще.

спасибо за совет!

тогда мне нужно при поиске линка создать переменную, которая будет записываться в список, в случае перехода по ссылке?

сейчас погуглю, как реализовать это.)

 

пока код выглядит у меня так:

 driver.get("https://www.nulled.cc/threads/39150/page-2");
        //Дальше ищу ссылку, открываю в новой вкладке браузера
        String currentWindowHandle = driver.getWindowHandle();
        driver.findElement(By.partialLinkText("http://lasto.com")).sendKeys(Keys.CONTROL, Keys.RETURN);
        //Перехожу в окно ссылки, принтскриню ее, закрываю и возвращаюсь в начальное окно
        ArrayList<String> windowHandles = new ArrayList<String>(driver.getWindowHandles());
        for (String window:windowHandles){
            if (!window.equals(currentWindowHandle)){
                driver.switchTo().window(window);
                File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                FileUtils.copyFile(scrFile, new File("D:/Jsoft/Screenshots/RESULT_FILENAME.png"));
                driver.close();
            }
            driver.switchTo().window(currentWindowHandle);
        }
        //Проверяем на наличие кнопки вперед
        try {
            driver.findElement(By.xpath("//*[contains(text(), 'Вперёд')]")).click();
        }
        //Если не находим, то остаемся на исходной странице
        catch (NoSuchElementException e) {
            driver.switchTo().window(currentWindowHandle);
        }

только пока вообще не разобрался, как это все сделать циклом непрекращающимся, чтоб скрипт каждые 0.5 сек обновлял и проверял страницу


  • 0

#6 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 15 октября 2018 - 15:22

вам кстати для этого силениум совсем не нужен.

 

есть нативные библиотеки почти в каждом языке программирования которые могут сходить по http на сайт по определённому урлу, взять контент и разобрать его на компоненты (начинаем постигать понятия сериализации и десериализации), выбрав от туда, только то, что вам надо. 

использовать для данной задачи силениум, это как секс с предохранением - не те ощущения, и усложнивщийся, неловкий для всех, процесс подготовки к непосредственно акту.

 

И кстати, реализация циклов и условий становится настолько простой без силениума, что результата вы достигните гораздо быстрее и получите гораздо больше удовольствия в процессе =).


  • 0

#7 deeew

deeew

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Александр Климов

Отправлено 15 октября 2018 - 18:07

вам кстати для этого силениум совсем не нужен.

 

есть нативные библиотеки почти в каждом языке программирования которые могут сходить по http на сайт по определённому урлу, взять контент и разобрать его на компоненты (начинаем постигать понятия сериализации и десериализации), выбрав от туда, только то, что вам надо. 

использовать для данной задачи силениум, это как секс с предохранением - не те ощущения, и усложнивщийся, неловкий для всех, процесс подготовки к непосредственно акту.

 

И кстати, реализация циклов и условий становится настолько простой без силениума, что результата вы достигните гораздо быстрее и получите гораздо больше удовольствия в процессе =).

 

На самом деле я изначально так и думал, повисеть в поисковике не более часа и найти утилиту или сервис, который мне подойдет для этих нужд.

Но потратив 3+ часа на поиск и не найдя вообще ничего толкового, кроме онлайн сервисов за 400$+ в месяц - я решил, что мне будет проще как то криво накодить, чем потратить еще не понятно сколько времени на поиск проги, которая не факт, что во всем меня устроит)


  • 0

#8 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 16 октября 2018 - 08:22

разместите на сайте sql.ru в разделе работа вашу задачу, думаю баксов за 200 сделаете. А если попросите сделать пояснения, то судя по всему, самостоятельно сможете поправить в случае изменения сайта.

 

селениум не самый лучший инструмент для вашей задачи.


  • 2



Темы с аналогичным тегами selenium webdriver, java, цикл, Мониторинг, chrome, HtmlUnit

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных