如何从javascript警报中捕获文本并使用chrome headless设置OK



伙计们!

如何从javascript警报中捕获文本并使用chrome headless设置OK?下面的代码运行得很好,但如果我设置无头选项,它似乎找不到弹出警报。

编辑我意识到我的代码在";self.action.move_to_element(firstLevelMenu(.perform((";,而是像我想的那样使用javascript警报。我该怎么修?

import os
from selenium import webdriver from webdriver_manager.chrome import
ChromeDriverManager from webdriver_manager.firefox import
GeckoDriverManager from selenium.webdriver.common.keys import Keys
import time as pausa  from selenium.webdriver.common.by import By from
selenium.webdriver.common.action_chains import ActionChains from
selenium.webdriver.support.ui import WebDriverWait from
selenium.webdriver.support import expected_conditions as EC #olhar
from selenium.webdriver.remote.webelement import WebElement from
datetime import datetime from tkinter import * from tkinter import
scrolledtext,  messagebox, ttk import pyautogui as p import csv import
datetime from datetime import date, datetime import pyodbc
elf.driver=网络驱动程序。Chrome('c:/driver/chromedriver.exe',options=options(#PASTA DO SCRIPT
self.action = ActionChains(self.driver)
self.wait = WebDriverWait(self.driver, 30)
self.wait2 = WebDriverWait(self.driver, 10)
agora = str(datetime.today()).replace(':', '.')

cria_pasta_log()
self.log = open(f'{caminho_log()}/log{agora}.csv', "w", newline='n', encoding='ANSI')
self.log.write(f'ID;Chpras;Bin;Final;Portador;Status')
self.login = in_login.get()
self.senha = in_senha.get()


def menu_reemitir(self, chpras):
self.retorna_frame()

firstLevelMenu = self.driver.find_element(By.XPATH, '//*[@id="imgMenu"]')
self.action.move_to_element(firstLevelMenu).perform() #menu opções
secondLevelMenu = self.driver.find_element(By.XPATH, '//*[@id="elem9"]')
secondLevelMenu.click() #submenu reemitir cartão
self.driver.switch_to.window(self.driver.window_handles[2]) #alternar para popup
self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="FormSAT"]/div[2]/table[2]/tbody/tr/td[1]/input'))).click()
# self.driver.execute_script("modificarReemision()") 
pausa.sleep(0.5)
#### THE PROBLEM STARTS RIGHT HERE!!!!!!!!!!!!!!!!!!!!!!!!
#there's 2 alerts. On the first one I need set an accept
alert1 = self.wait.until(EC.alert_is_present())

alert1.accept()


pausa.sleep(0.5)
try:
# on the second one I need cacth the text and set another "ok"
alert2 = self.wait.until(EC.alert_is_present())

text = alert2.text

alert2.accept()        

print(text)


if 'BLOQU' in str(text).upper():
text = self.captura_msg_bloqueio(chpras)

self.log.write(f'{text};')


except:
self.log.write(f'Não foi possível capturar a mensagem de retorno;')
self.driver.close()

self.aceita_alerta()
self.driver.switch_to.window(self.driver.window_handles[1])
pausa.sleep(0.5)

我真的需要使用headless选项,并且我需要加载/接受这两个弹出警报。我是怎么做到的?

您可以覆盖警报以捕获消息:

driver.executeScript("""
window.alert = message => window.alertMessage = message
""")

然后稍后获取

message = driver.executeScript("return window.alertMessage")

最新更新