0

Selenium과 win32com.client를 사용하여 사이트의 인증 팝업을 처리하는 키를 보낼 수 있습니다. 코드를 수동으로 실행할 때 (Jupyter Notebook 실행) 잘 작동합니다.Selenium Webdriver Python을 사용하는 인증 팝업

.ipynb를 .py로 변환하고 Windows 작업 스케줄러를 사용하여 자동으로 실행되도록 예약하면 오류가 발생합니다. 인증 팝업 창에 갇히게됩니다.

나는 아래의 옵션 시도 :

1.)이 노트북에서 잘 작동을

shell = comclt.Dispatch("WScript.Shell") 
driver = webdriver.Chrome(chrome_path) 
driver.maximize_window() 
driver.get(url) 
shell.SendKeys("username", + "{TAB}" + "password" + "{TAB}" + "{ENTER}") 

2) 그냥

shell = comclt.Dispatch("WScript.Shell") 
driver = webdriver.Chrome(chrome_path) 
driver.maximize_window() 
driver.get(url) 

try: 
    alert = driver.switch_to_alert().accept() 
    shell.SendKeys("username", + "{TAB}" + "password" + "{TAB}" + "{ENTER}") 

except NoAlertPresentException: 
    shell.SendKeys("username", + "{TAB}" + "password" + "{TAB}" + "{ENTER}") 

인가 노트북에 몇 가지 대안과 그 작업을 시도 작업 스케줄러를 사용하여이 코드 (.py)를 자동으로 실행하는 방법에 대한 더 나은 접근법이 있습니까? 잘 .ipynb 및 평에

+0

업데이트 : 액티브 데스크톱 세션이있는 경우에만 코드는 평에서 작동합니다. 컴퓨터가 예정된 실행 전에 비활성 상태를 감지 할 때마다 작업이 강제 적용되지 않습니다. 프로세스를 잠금 해제하고 프로세스를 잠글 수있는 방법이 있습니까? BTW, 콘솔 윈도우와 SetFocus를 최소화하기 위해 pywinauto를 추가했습니다. 고맙습니다! –

답변

0

작품 액티브 데스크톱 세션에서 업데이트하는 동안 : 는 콘솔 창 클래스

app = Application().Connect(title ='path' + 'python.exe', class_name = 'ConsoleWindowClass') 
cwc = app.ConsoleWindowClass 
cwc.Minimize() 

app = Application().Connect(title ='page', class_name = 'Chrome_WidgetWin_1') 
widget = app.Chrome_WidgetWin_1 
widget.Minimize() 
time.sleep(2) # will allow the some time before executing other task 
widget.Maximize() 
widget.SetFocus() 
time.sleep(3) 
shell.SendKeys("username", + "{TAB}" + "password" + "{TAB}" + "{ENTER}") 

컴퓨터가 잠겨있을 때 그것은 작동하지 않습니다을 최소화하기 위해 코드를 추가했습니다. 해결 방법은 마우스 이벤트에 pyautogui를 보내는 것입니다.

다시 말하지만, 그것은 최선의 해결책이되지 않을 수도 있지만, 이것이 당신의 가장 좋은 방법 : 때까지 내 임시 방편이다