伙计们!
如何从javascript警报中捕获文本并使用chrome headless设置OK?下面的代码运行得很好,但如果我设置无头选项,它似乎找不到弹出警报。
编辑我意识到我的代码在";self.action.move_to_element(firstLevelMenu(.perform((";,而是像我想的那样使用javascript警报。我该怎么修?
elf.driver=网络驱动程序。Chrome('c:/driver/chromedriver.exe',options=options(#PASTA DO SCRIPTimport 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
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")