Labview+Google Chrome

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума

Re: Labview+Google Chrome

Postby rushonda on 31 May 2018, 09:11

Всем добрый день! Давно завел эту тему и наконец-то нашел способ щелкать по кнопкам на сайтах. Можно конечно и парсить ответы http, но есть более простой способ на мой взгляд.

1) Качаем с сайта https://www.seleniumhq.org/download/: webdriver.dll для c#.
2) chromedriver.exe с того же сайта.
3) и с помощью net работаем с webdriver.dll

Есть вопросик по этому поводу: как организовать структуру вида:
WebDriverWait vw = new WebDriverWait (Browser, TimeSpan.FromSecond(10));
IWebElement txt = vw.Until (ExpectedCondition.ElementIsVisible(By.CssSelector("result p")));

на labview?
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

Re: Labview+Google Chrome

Postby dadreamer on 05 Jun 2018, 20:02

rushonda wrote:Можно конечно и парсить ответы http, но есть более простой способ на мой взгляд.

Пока что нет возможности поставить и детально попробовать. Это на любых сайтах/кнопках работает?..
rushonda wrote:Есть вопросик по этому поводу: как организовать структуру вида:
WebDriverWait vw = new WebDriverWait (Browser, TimeSpan.FromSecond(10));
IWebElement txt = vw.Until (ExpectedCondition.ElementIsVisible(By.CssSelector("result p")));

на labview?

Очевидно, сначала нужно создать объект WebDriverWait с помощью .NET Constructor Node. Затем вызвать метод Until только что созданного объекта и в итоге должна вернуться ссылка на объект IWebElement. Это теория, я пока не смогу проверить. Можете подождать пару дней или сами. :wink:
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

Re: Labview+Google Chrome

Postby rushonda on 05 Jun 2018, 22:31

dadreamer, да абсолютно любой, и все очень просто и достаточно удобно - можно работать в режиме нескольких браузеров и в режиме Phantom.

Я сам то пробовал - все основные функции работают, но эта никак не получается. В labview функции почему-то по-другому немного выглядят, нежели в c# ?
хотя dll одна и та же...
Да, подожду. если нужно могу скинуть dll-ки.
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

Re: Labview+Google Chrome

Postby dadreamer on 09 Jun 2018, 16:40

rushonda wrote:1) Качаем с сайта https://www.seleniumhq.org/download/: webdriver.dll для c#.
2) chromedriver.exe с того же сайта.
3) и с помощью net работаем с webdriver.dll

Есть вопросик по этому поводу: как организовать структуру вида:
WebDriverWait vw = new WebDriverWait (Browser, TimeSpan.FromSecond(10));
IWebElement txt = vw.Until (ExpectedCondition.ElementIsVisible(By.CssSelector("result p")));

на labview?

Я хромом не пользуюсь, потому пришлось разбираться, как прикрутить Selenium к Firefox (у меня ESR 52.8.1, потому geckodriver.exe не канает). В общем, пример из официальной документации у меня заработал в таком виде:
Code: Select all
        // Create a new instance of the Firefox driver
        // Notice that the remainder of the code relies on the interface,
        // not the implementation.
        WebDriver driver = new FirefoxDriver();

        // And now use this to visit Google
        driver.get("http://www.google.com");
        // Alternatively the same thing can be done like this
        // driver.navigate().to("http://www.google.com");

        // Find the text input element by its name
        WebElement element = driver.findElement(By.name("q"));

        // Enter something to search for
        element.sendKeys("Cheese!");

        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();

        // Check the title of the page
        System.out.println("Page title is: " + driver.getTitle());
       
        // Google's search is rendered dynamically with JavaScript.
        // Wait for the page to load, timeout after 10 seconds
        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

        // Should see: "cheese! - Google Search"
        System.out.println("Page title is: " + driver.getTitle());
       
        //Close the browser
        driver.quit();

webdriver_ff.png

Как можно видеть, библиотека не экспортирует в :labview: функцию Until и Expected Conditions (увы и ах!). Поэтому функции вида
Code: Select all
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

предлагаю заменять на обычный цикл While по условию (см. пример). В вашем случае, видимо, нужно проверять содержимое страницы, чтобы определить, является ли элемент видимым. Можно, конечно, написать более дружелюбную библиотеку-обёртку на C#, и её потом дёргать из :labview: . Тогда можно будет использовать весь функционал веб-драйвера.
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

Re: Labview+Google Chrome

Postby rushonda on 10 Jun 2018, 18:06

dadreamer, спасибо за комментарии.
В вашем случае, видимо, нужно проверять содержимое страницы, чтобы определить, является ли элемент видимым.

Да, именно так и делал - в цикле происходит проверка наличия/отсутствия элемента.

Можно, конечно, написать более дружелюбную библиотеку-обёртку на C#

Странно, что библиотека не вся импортируется, с чем это интересно связано?

При этом эта библиотека в c# вся доступна...

--------------
Это не чат, это форум.
Нет смысла писать сообщения с интервалом 3 минуты.
С уважением, IvanLis
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

Re: Labview+Google Chrome

Postby dadreamer on 10 Jun 2018, 18:49

rushonda wrote:Странно, что библиотека не вся импортируется, с чем это интересно связано?

При этом эта библиотека в c# вся доступна...

Я сейчас могу ошибаться (я далеко не эксперт в C#, так, любитель). По докам, ExpectedConditions - это статический запечатанный (sealed) класс, содержащий набор интерфейсов ExpectedCondition. Такой класс не имеет конструктора и в :labview: его свойства/методы доступны с помощью обращения к константе (суть - статический экземпляр класса). Подозреваю, дело в том, что экземпляр должен быть создан с помощью преобразования типа:
Code: Select all
new ExpectedCondition<Boolean>()

:labview: такой способ создания не поддерживает (вероятно), потому и не отображает ExpectedConditions в списке экспортируемых классов.
Until - функция (метод) объекта WebDriverWait, и по идее она должна быть видна со стороны :labview: . Почему этого не происходит - :dntknw: Надеюсь, меня поправит кто-нибудь более опытный в C#.

upd:
А ларчик просто открывался. :crazy: ExpectedConditions вынесен в отдельную DLL - WebDriver.Support.dll. Нужно поместить эту DLL рядом с WebDriver.dll (не мешать разные версии! версия обеих библиотек должна быть одинакова) , далее в :labview: создаём .NET константу, ПКМ -> Select .NET Class -> Browse -> Выбираем библиотеку (Browse) -> OpenQA.Selenium.Support.UI -> ExpectedConditions. Ну и дальше можно через Invoke Nodes что-нибудь закодить.

Насчёт Until пока не знаю. Глянул Идой, функция в библиотеке имеется. Как вызвать - хз.
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

Re: Labview+Google Chrome

Postby rushonda on 11 Jun 2018, 23:59

dadreamer, ну теперь все ясно, NET константу создавать, это так просто не догадаешься)
Спасибо.
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

Previous

Return to Общие

Who is online

Users browsing this forum: No registered users and 4 guests

cron