Реально ли ускорить существующий скрипт ?

chromedriver
windows
selenium
webdriver
python
Теги: #<Tag:0x00007fedbbbe6620> #<Tag:0x00007fedbbbe6378> #<Tag:0x00007fedbbbe61e8> #<Tag:0x00007fedbbbe6008> #<Tag:0x00007fedbbbe5ec8>

(Acamori) #22

К сожалению не сработало.

driver.execute_script("arguments[0].setAttribute('ng-init', 'bpo.Address='1111')", elem)



Traceback (most recent call last):
  File "<pyshell#56>", line 1, in <module>
    driver.execute_script("arguments[0].setAttribute('ng-init', 'bpo.Address='1111')", elem)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 491, in execute_script
    'args': converted_args})['value']
  File "C:\Users\admin\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Runtime.evaluate threw exception: SyntaxError: missing ) after argument list
  (Session info: chrome=61.0.3163.79)
  (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 10.0.15063 x86_64)

(Acamori) #23

используйте фабрики или прямой SQL, чтобы заполнить необходимыми данными БД.

Это к сожалению для меня пока из разряда научной фантастики :frowning:


(Артём Устилко) #24

Просите разработчиков предоставить\создать Вам API для заполнения нужных полей. Автоматизация - дело совместное.


(Artur Korobeynyk) #25

По поводу моего варианта, вы понимаете что там синтаксическая ошибка, а не идейная? Исправьте свой синтаксис и может сработать.


(Acamori) #26

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


(Vatslau) #27

пост.пут запрос идёт так или иначе после сабмита формы на сервер.
посмотрите что за запрос - и если по-простому импортируйте в постман
дальше параметризация -дело техники)
сможете 400 сабмитов за 2-3минуты прогнать


(Acamori) #28

Начал копать сейчас в сторону post запросов через python+requests. Но знаний пока не хватает, а гайдов толковых не могу найти. Да и там еще проблема с авторизацией и получением 3х разных куков :slight_smile:


(Vatslau) #29

что тут копать - постман 100 тестов за час,
непонятно как делать, туториалы “ниасилить”
подсказываю хак - отрываете браузер дев консоль например хрома
и бах правой кнопкой на запросе - сохнанить как C-url (что такое тут гугл поможет)
потом в постмане импорт - как рав текст
хдыщь первый запрос есть. и так 100500 раз если нету АПИ нормального.
Потом лишние хедеры поудалять,
хотя бы примитивные тесты из темлейтов сделать
смоук готов.

если не нужно конфиги тестить с тучей переменных и мокать респонсы - то самое то для начала(хотя и тут управление тоже есть но конечно в коде можно всё удобнее сделать)

потом там есть кнопка экспорта кода питоны-шмитоны, джеэсы и всё что угодно
понятно что это чисто поиграться и понять как клиент работает
потом нужен норм билдер сделать, отрефакторить - и вперёд


(Vatslau) #30

вместо сендкейс - val (селениде) ускорение 10-20 раз примерно


(Acamori) #31
import requests

url = "https://www.bpofulfillment.com/api/File/ClientRequestWithFile"

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Context\"\r\n\r\nBpoComp\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Action\"\r\n\r\nBpoAsset.BpoFileRequestPrc\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[Action]\"\r\n\r\nUploadCompPdf\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[AssetId]\"\r\n\r\n4530648\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[Data][AssetId]\"\r\n\r\n4530648\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[Data][OrderId]\"\r\n\r\n3136150\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[Data][CompType]\"\r\n\r\nSale1\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[Data][DocumentType]\"\r\n\r\nMLS\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Data[Data][Upload]\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"; filename=\"sold.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'authorization': "Basic TWFrc3ltMjE6QnBvb3JkZXJAMDAz",
    'cache-control': "no-cache",
    'postman-token': "7d5eb7c0-1aee-dc4b-9f6f-9e9af2babf2d"
    }

response = requests.request("POST", url, data=payload, headers=headers)

В общем с использованием всяких “вжух” и “бдыщь” получилось что-то эдакое. И возник небольшой вопрос, как в payload корректно передать файл что б залить одним запросом ? Ибо в постмане он заливается через диалоговое окно и в коде это не отображается. =\


(Maxim Zaitsev) #32

Хоть бы поискал для начала сам. Вопрос-то уже тыщу раз заданный.


(Acamori) #33

Подсказали как правильно преобразовать код с постмана в питон и уже все стало более или менее понятно, но за напутствие все равно спасибо :slight_smile:


(Vatslau) #34

ну так что вопрос решён?


(Acamori) #35

Сейчас буду тестировать с post запросами, если удастся их приручить - то думаю действительно дело пойдет быстрей.


(Bolatbek) #36

Вам надо свои туториалы писать )


(Vatslau) #37

Спасиб)
на работе провожу вебинары в стиле “how to”
для ноледж трансфера коллегам ))