Как обратиться к активному окну браузера и нажать там что-нибудь? - PullRequest
0 голосов
/ 29 октября 2019

Я довольно новичок в Python и создаю робота для экспорта некоторых отчетов из системы в Silverlight. Поэтому я не могу использовать элементы страницы, чтобы щелкать / выбирать / вставлять даты и т. Д.

Затем мое решение использовало pyautogui для перемещения мыши, нажатия правой кнопки и сохранения файлов. ...

Процесс:

-Выберите даты отчета

-Нажмите на «команда», мне нужен отчет для

-Нажмите кнопку предварительного просмотра (здесь откроется новое окно)

- Максимизируйте это окно, содержащее отчет

- Нажмите кнопку «Экспорт» (раскрывающийся список)

-Выберите «Экспорт в CSV»

А затем с помощью кода получите последний загруженный файл и переместите его в папку, где я сохраняю отчеты.

Узкое место в этом: иногда из-занеизвестная причина, кнопка «Экспорт» составляет 20/30 пикселей в сторону. Это означает, что робот щелкает в никуда, и код останавливается, так как нет «последнего загруженного файла» для обработки. Я уже заметил, что это второе окно (где открывается отчет) не в Silverlight. Это простой HTML. Я знаю, что мог бы использовать некоторые методы в selenium, чтобы выбрать опцию «Экспорт / Экспорт в CSV» (так же, как я делал для входа в эту систему). Но моя проблема: как мне обратиться к этому новому окну?

Код, который я использую, ссылается на главную страницу, используя selenium.wedriver, но я не смог найти способ обратиться к новому окну (которое закрывается после того, как я загрузил CSV. Затем я снова нажимаю в«Предварительный просмотр» и другое окно открывается, и процесс повторяется сотни раз) ...

wsite='https://WEBSITE TO EXTRACT'
driver = webdriver.Ie('C:\\MyFolder\\IEDriverServer.exe')
driver.get(wsite) #opens the site
driver.find_element_by_id('userNameInput').send_keys('USERNAME')
driver.find_element_by_id ('passwordInput').send_keys('PASSWORD')
driver.find_element_by_id('submitButton').click()

Затем, есть много строк кода (где мышь щелкает, где это необходимо ...

pyautogui.moveTo(1846,1000,intervaltoclick)#Preview button
pyautogui.click()
time.sleep(3)
hwnd = win32gui.GetForegroundWindow()
win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)
if i<1:
    time.sleep(10+t)
else:
    time.sleep(5+(t/5))
pyautogui.moveTo(566,52,intervaltoclick)#Export
pyautogui.click()
pyautogui.moveTo(603,205,intervaltoclick)#Save as CSV
pyautogui.click()
time.sleep(3)
pyautogui.moveTo(1270,1025,intervaltoclick)#close window
pyautogui.click()

У кого-нибудь есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 30 октября 2019

Вы можете попытаться сохранить объект селена браузера IE, который вы использовали для входа в систему. Вы можете скрыть это, если не хотите показывать на экране. Вы можете затем попытаться перебрать окна IE и переключиться на нужное окно.

 Set<String> allWindowHandles = browser.getWindowHandles();

       for(String handle : allWindowHandles)
       {
           System.out.println("Window handle - > " + handle);
           browser.switchTo().window(handle);
           System.out.println(browser.getTitle());
       }

Вот полезная ссылка, в которой показаны примеры переключения окна.

Команды окна Selenium WebDriver Switch

...