Итак, у меня возникла общая проблема: я пытаюсь автоматизировать вход в систему, выбор пунктов меню, а затем предварительно заполнить поля для инициализации загрузки файла. Я был в состоянии автоматического входа, большое спасибо за ответ, предоставленный в другом посте. Однако мне не удалось перейти к указанному пункту меню c и выбрать этот элемент, чтобы перейти на новую страницу. Если я go перехожу на эту страницу напрямую, я выхожу из системы и должен снова войти в систему. Есть место под названием «Пользовательские отчеты», это то, что мне нужно нажать, чтобы перейти на другую страницу. Если бы у объектов li были идентификаторы, это сделало бы это намного проще, однако идентификаторов не было бы, как можно себе представить. Вот источник веб-страницы, которую я пытаюсь автоматизировать, перейдите по ссылке, которую я сохранил в github.
https://github.com/Richard-Barrett/ITDataServicesInfra/blob/master/Python/Collegeboard/TSI/tsi_pagesource
Я пытаюсь нажать на этот элемент
<li ng-show="core.acl['244']!='N'" ng-class="{active:isLocation('/customReports')}">
<a href="#/customReports" translate='reports.CustomReports.title'></a>
</li>
Как вы можете себе представить, я не смог сделать так. Вот код, который я использую для извлечения информации. Автоматизация входа в систему работает.
#!/bin/python
# ===========================================================
# Created By: Richard Barrett
# Organization: DVISD
# DepartmenT: Data Services
# Purpose: Test Score & 3rd Party Website Data Pull Automation
# Date: 01/20/2020
# ===========================================================
import selenium
import os
import unittest
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.select import Select
#Variable Definitions NEED TO MAKE
#find_elements_by_name
#find_elements_by_xpath
#find_elements_by_link_text
#find_elements_by_partial_link_text
#find_elements_by_tag_name
#find_elements_by_class_name
#find_elements_by_css_selector
#URL Variables
login_url = 'https://www.accuplacer.org/'
redirect_url = 'https://www.accuplacer.org/api/home.html#/'
reports_scheduler_url = 'https://www.accuplacer.org/api/home.html#/reportScheduler'
custom_reports_url = 'https://www.accuplacer.org/api/home.html#/customReports'
#WebDriver Path
browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\chromedriver.exe")
#Parent URL
browser.get("https://www.accuplacer.org")
# Authentication
# Credentials NEEDS TO BE ENCRYPTED AND NOT BAKED INTO THE SCRIPT NEEDS UNIT TEST
username = browser.find_element_by_id("login")
password = browser.find_element_by_id("password")
username.send_keys("##############")
password.send_keys("##############")
#browser.send_keys(Keys.ENTER)
#browser.send_keys(Keys.RETURN)
# Work on Notifications Window Clause
# Need a step for when notifications appear to click "Submit" option
# <button type="button" ng-show="updateWhatsNewFlag == 'failure'" translate="submit" class="btn btn-sm btn-success ng-scope" ng-click="updateShowWhatsNewFlag()" style="">Submit</button>
# Need a step to close if the notification popup window is present
# <button type="button" class="btn btn-default ng-scope" data-dismiss="modal" ng-click="clearMessages()" translate="common.btn.close">Close</button>
# Authentication submit.click()
#browser.find_element_by_css_selector('.btn.btn-lg.btn-primary').click()
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn.btn-lg.btn-primary.pull-left")))
element.click();
#Navigate to CustomReports XPATH=//*[@id="leftNav"]/ul/li[11]/ul/li[9]/a
#browser.find_element_by_xpath('//*[@id="leftNav"]/ul/li[11]').click()
# Make the report by selecting objects
#obj_report = Select(browser.find_element_by_name("Reports"))
element = WebDriverWait(browser, 20).until(
EC.element_to_be_clickable((By.CSS_XPATH, "*[@id="leftNav"]/ul/li[11]/ul/li[9]/a")))
element.click();
Каждый раз, когда я пытаюсь использовать xpath, он ничего мне не дает и в основном говорит, что его не существует.