|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
Передача объекта webdriver из одного запущенного скрипта в другой, при определённом условии12.01.2023, 23:39. Показов 2742. Ответов 29
Здравствуйте.
Тема очень сложная Есть задача, которая на первый взгляд звучит легко, но увы. Описание задачи. Скрипт 1.py Создаёт несколько объектов webdrivera (driver1, driver2, driver3), выполняет определённые задачи с ними и потом просто стоит, ждёт, что-бы передать этот конечный объект в скрипт 2.py." Скрипт 2.py Включается в другое совершенно время, выполняет свои задачи и при наступлении определённого условия обращается к этим "уже подготовленным объектам" и перенимает контроль над тем браузером, который был открыт каждым вебдрайвером. Сразу говорю, никакого пессимизма, со словами "Это не возможно" Всё возможно! ![]() Я гуглила пару дней и примерно поняла в каком направлении нужно копать. Нужно работать с библиотеками memcash, и сокет (создание сервер, клиент) и вроде как должно получится. Если у Вас есть какие либо мысли по этому поводу или альтернативные решения, предложения, то буду им рада.
0
|
|
| 12.01.2023, 23:39 | |
|
Ответы с готовыми решениями:
29
Передача переменной из одного скрипта в другой |
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 13.01.2023, 11:33 [ТС] | |
|
Что, товарищи программисты, сложно ? Да, это вам не ЕГЭ и не вывод всех гласных из предложения
0
|
|
|
Автоматизируй это!
|
|
| 13.01.2023, 11:58 | |
|
DK100, вообще не сложно, два процесса и пайп или очередь между ними. Первый процесс создает драйвера, стартует процесс второго скрипта и в очередь засыпает свои драйверы. Второй скрипт из очереди или пайпа все достает и использует как хочет.
а главное не забывайте что вам никто ничего не должен, с задачами помогают по мере интереса к ним, а тут задача явно неверно спроектирована.
0
|
|
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 13.01.2023, 12:16 [ТС] | |
|
Тут прошу уточнить, что вы имеете в виду. Первый процесс стартует процесс второго скрипта? Если Вы это имели в виду, то это не подходит совсем.
Где эта очередь хранится? Ну хотя бы пример обрисуете в двух строчках кода. Хотя бы схематично с пайпом, так как я с ним вообще не сталкивалась
0
|
|
|
Автоматизируй это!
|
|
| 13.01.2023, 12:23 | |
|
DK100, странно что не подходит, а чем это отличается от того что скрипт запустят руками? тут просто будет запущен отдельный процесс, они между собой могут делиться данными, это упростит дело. Строчек кода не будет, читаем документацию по мультипроцессинг.
Что товарищи новички, сложно? это вам не посты в ВК читать! есть еще способ к уже открытым драйверам селениума подключиться зная их порты, но это от лукавого и надо пробовать -сработает ли. Еще раз повторю, что то не так с самой задачей, скорее всего спланирована тем, кто не имеет представления о том как такие вещи решают. Почему второй скрипт не может сам драйвера поднять? Почему 1 не может их использовать? почему в рамках одной программы это не решить с использованием событий и таймаутов, если нужно ждать какого то события?
0
|
|
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 13.01.2023, 12:24 [ТС] | |
|
Или что значит очередь между ними? Планируется множество скриптов , которые будут обращаться к подготовленным вебрдайверам. (разумеется обращаться они будут только к тем, которые не заняты, что бы не пересекаться, как только объект был "взят", он уходит в чёрный список)
0
|
|
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 13.01.2023, 12:35 [ТС] | |
|
В рамках одного скрипта это было уже давно сделано и с мультипроцесами и тредами итд. Зачем и почему так? Потому что таковы условия и дело не в проектировании задачи. Так сложилось, что нужно именно вот так сделать.
Добавлено через 5 минут Меня интересует как именно 10 скриптов, обратятся к первому за его объектами? Как они увидят его?
0
|
|
|
Автоматизируй это!
|
||
| 13.01.2023, 12:40 | ||
|
ну попробуй еще пиклом десериализовать драйвера и через сокет кинуть второму скрипту, заодно узнаешь сработат ли)
Добавлено через 1 минуту Если же это вообще отдельные программы, то или смотреть можно ли переиспользовать порты (а при старте драйвера можно конкретный порт указать) или пикл+сокет (что вряд ли)
0
|
||
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 13.01.2023, 12:58 [ТС] | |
|
Вот в этом то и было самое условие, первый скрипт НИКОГО не стартует. И именно с этим условием, реализовать это очень трудно.
Это больше похоже на то, что "Я бы сделал, но мне лень", но, что я сомневаюсь ![]() Без обид ![]() Просто постоянно натыкаюсь на то, что другие люди зачем то закрывают глаза на условия задачи ссылаясь на то, что можно сделать проще, упрощают её и потом говорят, что она не сложная и скучная "Мол вот вам ссылки" ![]() Добавлено через 4 минуты переиспользовать порты (а при старте драйвера можно конкретный порт указать) В теории, а на практике он создаст новый драйвер с тем поротом и попытается снова открыть уже запущенный профиль браузера, что приведёт к ошибке. Добавлено через 4 минуты Я читала, что можно как то с помощью memcashe, загрузить в память с "ID" и поэтому id вытащить. И при этом использовать первый скрипт как сервер, а остальные как клиент.
0
|
|
|
Автоматизируй это!
|
||||
| 13.01.2023, 13:20 | ||||
|
Без обид. Что я бы сделал я уже написал -попробовал пикл+ сокет, погуглил про порты драйвера, потому что мне как то попадалась статья на эту тему.
1
|
||||
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
||||
| 13.01.2023, 13:37 [ТС] | ||||
|
0
|
||||
|
Автоматизируй это!
|
|
| 13.01.2023, 16:06 | |
|
DK100, если бы задача была странная и мне бы студент подошел мол тут тупо как то , я б ему балл повысил) На месте препода имею в виду.
в общем так, если в выходные не забуду - попробую тоже провернуть через сокеты. Добавлено через 2 часа 26 минут DK100, вот это посмотри, я давно не пользовался, потому позыбыл что есть такая крутая вещью По сути создаешь сервер и ноды (можно на одной машине, можно на разных) разворачиваешь браузеры нужных версий и любой кто подключится к серверу по его адресу -сможет управлять любым браузером. Как раз вроде твой случай, причем поддерживает параллельность то есть одновременно несколько могут стучаться, лишь бы хватило браузеров на них. https://www.selenium.dev/documentation/grid/
1
|
|
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 13.01.2023, 16:15 [ТС] | |
|
Вооо, вот это уже очень даже похоже на решение
![]() Благодарю, наводка хорошая !
0
|
|
|
207 / 58 / 19
Регистрация: 18.02.2018
Сообщений: 258
|
||||||||||||||||
| 14.01.2023, 18:52 | ||||||||||||||||
|
Ну допустим, у нас будет 1 объект, который будет смотреть содержимое локального сайта site.html.
site.html
script2.py
0
|
||||||||||||||||
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 14.01.2023, 19:10 [ТС] | |
|
Я сейчас в пути, но выглядит, вроде Мощнянски
)Надо затестить, понять то ли это, а т со смартфона тяжко ![]() Добавлено через 5 минут Пока вопрос на перёд, можно ли тут реализовать передачу например десяти драйверов десяти скриптам ?
0
|
|
|
207 / 58 / 19
Регистрация: 18.02.2018
Сообщений: 258
|
|
| 14.01.2023, 20:27 | |
|
Да, можно
1
|
|
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 14.01.2023, 20:55 [ТС] | |
|
К сожалению тут есть загвоздка.
1) Когда скрипт 2 создаёт новый объект, он использует новый чистый профиль браузера, мне нужно, что бы он именно взял управление над первым профайлом браузера, так как он будет содержать, все нужные кукисы и самое важное уникальные токены на оплату итд, а их уже никак не передать. Поэтому, всё что подготовит скрипт 1 не будет иметь смысла. Да, внутренности хтмл будут видны, но там суть не только в этом. Очень важно именно "завладеть" и драйвером и тем подготовленным профайлом веббраузера. 2)Триггер на "перехват" драйвера идёт не из хтмл, скрипт 2 получит сигнал из совершенно другого источника. Поэтому страница не будет меняться никак. Она по сути будет стоять с формуляром или кнопкой и ждать нажатия или ввода. Тут важны куксы, а их не будет во втором скрипте. Но очень многое я для себя подчеркнула, положила в папочку Ваш скрипт, а вдруг пригодится для других проектов ![]() Добавлено через 2 минуты Как выше уже человек предложил, наверно Selenium Grid решение моего вопроса.
0
|
|
|
Йуный плагиат-падаван)
176 / 119 / 45
Регистрация: 17.10.2022
Сообщений: 566
|
|||||||||||
| 14.01.2023, 21:59 | |||||||||||
|
Скрипт 1:
Также важно отметить, что вы не можете использовать объект webdriver после его закрытия, вы должны создать его заново после закрытия. В качестве альтернативы вы можете использовать другие методы межпроцессного взаимодействия, такие как сокеты, очереди сообщений и т.д.
1
|
|||||||||||
|
2 / 2 / 0
Регистрация: 21.04.2022
Сообщений: 29
|
|
| 14.01.2023, 22:27 [ТС] | |
|
К сожалению этот вариант тоже не подходит.
Давайте я поясню. Скрипт 1 1) Создаёт вебдраивер - открывает определённый профаил браузера. 2) Начинает заполнять разные формы, джава окошки итд. Доводит до определённого момента, до кнопки и стоит ждёт. Всё это невозможно передать ни кукисами, ни хтмл кодом, ни простой урл. Давайте для простоты возьмём браузерную игру "Ферму" или какие там сейчас есть, а то я далека от этого(мне не для этого нужно, но так будет лучше для представление) Допустим сохранять нельзя. Вот я первым скриптом посадила морковку, полила капуста и прочую дребедень сделала (всё это пиклом - кукисами не передать), потом скрипт пошёл дальше создавать новый драйвер для второй игры итд. А скрипт номер два должен просто подключится, перенять "бразды правления", и "накормить корову, капустой и морковкой или что они там едят )Поэтому основное правило никакого закрытия вебдрайвера, а именно того профиля браузера который он открыл и создания нового, так как я просто никак не смогу передать ту уникальную информацию. Скрипт один должен дождаться скрипт 2, и передать ему полностью "управление" тем профайлом браузера, который был открыт и подготовлен к нажатию копки.
0
|
|
| 14.01.2023, 22:27 | |
|
Помогаю со студенческими работами здесь
20
Передача параметров из одного скрипта в другой. С# Передача переменной из одного скрипта в другой Передача значений переменных из одного js-скрипта в другой Delphi, передача интерфейса com-объекта из одного потока, в другой Передача методу одного объекта ссылки на другой объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|