Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Автоматизация браузеров, Нативная поддержка всех возможностей браузера
Cockney
сообщение 23.12.2020, 23:45
Сообщение #1


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21045
Пользователь №: 16.156



Ссылка на проект: https://www.selenium.dev/
Ссылка на актуальные биндинги:https://www.selenium.dev/downloads/
Ссылка на драйвера и сторонние биндинги: https://www.selenium.dev/ecosystem/
Документация к Python биндингу: https://selenium-python.readthedocs.io/index.html
Начало работы с Python биндингом: https://selenium-python.readthedocs.io/installation.html

Нет биндинга для Вашего языка ?
Спецификация WebDriver
Реализация для Delphi
Реализация для Rust
Реализация для C++


Как использовать:
  1. Установить нужный драйвер, например для Google Chrome в любую папку
  2. Добавить путь до драйвера в PATH
  3. Используя биндинг, автоматизировать требуемый ресурс
Пример решения задачи на Python:
Спойлер

Код

import time
import json
import sys
import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


URL = "https://istqb-training.ru/Training"
WAIT_TIMEOUT = 30

driver = webdriver.Chrome()
driver.get(URL)
driver.set_window_rect(10, 10, 900, 900)
driver.implicitly_wait(1.5)

startIndex = int(sys.argv[1])
stepsCount = int(sys.argv[2])
outFile = sys.argv[3]

questionNumberInput = None
try:
    WebDriverWait(driver, WAIT_TIMEOUT).until(
        EC.visibility_of_element_located((By.ID, 'questionNumberInput'))
    ).send_keys(str(startIndex))

    WebDriverWait(driver, WAIT_TIMEOUT).until(
        EC.visibility_of_element_located((By.ID, 'go-go-power-rangers'))
    ).click()

    time.sleep(10)

    result = {}
    t1 = datetime.datetime.now()
    for i in range(stepsCount):

        time.sleep(0.2)

        questionText = WebDriverWait(driver, WAIT_TIMEOUT).until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, '#content-block > div > div'))
        ).text

        if questionText:
            WebDriverWait(driver, WAIT_TIMEOUT).until(
                EC.visibility_of_element_located((By.ID, 'checkAnswButton'))
            ).click()

            time.sleep(0.2)

            answerText = WebDriverWait(driver, WAIT_TIMEOUT).until(
                EC.visibility_of_element_located((By.XPATH, '//*[contains(@id, \"answ-\")][contains(@style, \"background-color: limegreen\")]'))
            ).text

            WebDriverWait(driver, WAIT_TIMEOUT).until(
                EC.visibility_of_element_located((By.XPATH, '//*[@id=\"nextQuestButton\"]'))
            ).click()

            time.sleep(0.15)

            result[questionText] = answerText

    print(f'Start question: {startIndex}.')
    print(f'Question count: {stepsCount}.')
    print(f'Time elapsed: {datetime.datetime.now() - t1}.')
    # swap to file
    f = open(outFile, 'w')
    f.write(json.dumps(result))
    f.close()
except Exception as ex:
    print(ex)
finally:
    driver.quit()



Использование:
Код

python <script_name>.py 1 100 <out_file>



Умеет все что умеет обычный браузер + имеет возможность перебирать полный DOM страницы, выполнять JS. Хорошо подходит для работы с ресурсами на React, Angular, которые как правило создают глубокую вложенность элементов и генерируют свои id, class для элементов (регуляркой по полученному html сложно выбрать) да и в целом если контент динамический.


Ну и полная кроссплатформенность, разумеется кроме драйвера Edge.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.12.2020, 0:45
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



Selenium это круто, но без знаний большинство пользователей с этим не разберутся.
Цитата
Установить нужный драйвер, например для Google Chrome в любую папку

Версия драйвера должна совпадать с версией браузера.
Цитата
Добавить путь до драйвера в PATH

Или указать путь в скрипте:
Код
path_webdriver = r"C:\Python39\webdriver\chromedriver.exe"  # путь к драйверу
driver = webdriver.Chrome(executable_path=path_webdriver)

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.12.2020, 1:18
Сообщение #3


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21045
Пользователь №: 16.156



Цитата(cirus @ 24.12.2020, 0:45) *

Selenium это круто, но без знаний большинство пользователей с этим не разберутся.



Это также относится и к пилоту, и к луа. Было бы желание....да и собственно, решенных задач на селениуме куда больше чем на пилоте, успевай гуглить только.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.12.2020, 4:08
Сообщение #4


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2399
Пользователь №: 18.746



Интересная штука.
Прикрутил к пилоту.

Сообщение отредактировал Fors1k - 25.12.2020, 15:49


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 2:00
Designed by Nickostyle