Спасибо всем, кто видел эту проблему. Я нажимаю кнопку, чтобы запустить выполнение функции, которая использует selenium
в этой функции для создания driver
.
. С помощью этого драйвера я могу перетаскивать изображения, нажимать кнопки, отправлять SMS-капчу на телефон, не открывая окно браузера Firefox.
Когда все это закончится, мне нужно перейти к мастеру, чтобы заставить моих пользователей вводить капчу, отправленную на телефон. Но после того, как мы загрузим мастер из odoo интерфейс и введите капчу и нажмите кнопку подтверждения, мне нужно ввести значение капчи на страницу, которую я только что открыл с driver
.
Как мне получить предыдущий driver
? Какие есть хорошие решения, спасибо.
Это моя функция для использования selenium
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
import selenium
from selenium.webdriver.firefox.options import Options
import time
from selenium.webdriver import ActionChains
class SaleOrderSend(models.Model)
_name='sale.order.send'
@api.multi
def handel_web_send_captcha(self):
options = Options()
options.add_argument('--headless')
driver = selenium.webdriver.Firefox(options=options)
driver.get(sign_url)
time.sleep(15)
ac1 = driver.find_elements_by_class_name("es-drag-seal")[0]
ac2 = driver.find_element_by_class_name('es-sign-date-field')
time.sleep(1)
ActionChains(driver).drag_and_drop(ac1, ac2).perform()
time.sleep(2)
submit_button = driver.find_element_by_xpath("//button//span[text()='Submit']")
submit_button.click()
time.sleep(3)
driver.switch_to.frame(0)
short_message = driver.find_element_by_xpath("//a[text()='Sign']")
short_message.click()
time.sleep(3)
send_code = driver.find_element_by_xpath("//div[@class='el-form-item__content']//button//span[text()='Get_Code']")
send_code.click()
time.sleep(2)
driver.close()
action = {
'name': _("Please enter the verification code"),
'type': 'ir.actions.act_window',
'res_model': 'signature.code',
'view_type': 'form',
'view_mode': 'form',
'target': 'new'
}
return action
А это мой файл py и xml файл в мастере
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
import selenium
from selenium.webdriver.firefox.options import Options
import time
from selenium.webdriver import ActionChains
class SignatureCode(models.Model):
_name = 'signature.code'
_description = 'Signature Code'
sign_code = fields.Char('Sign Code')
sign_url = fields.Char('Sign Url')
@api.multi
def confirm_sign_code(self):
"""
Enter the user's captcha code into the browser page you just opened using selenium.
:return:
"""
sign_code = self.sign_code
# How do I get to the previous driver? driver = selenium.webdriver.Firefox(options=options)
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="signature_code_form_view" model="ir.ui.view">
<field name="name">Signature Code Form View</field>
<field name="model">signature.code</field>
<field name="arch" type="xml">
<form string="Signature Code Form View">
<sheet>
<group>
<group>
<field name="sign_code" required="1" readonly="0"/>
</group>
</group>
</sheet>
<footer>
<button string="Confirm" name="confirm_sign_code" type="object" default_focus="1"
class="btn-primary"/>
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>