XPATHS в Python с Selenium не найдены - PullRequest
0 голосов
/ 03 февраля 2020

Поэтому я пытаюсь войти на сайт, используя Python и Selenium. Однако проблема в том, что если я использую настоящий веб-сайт, я получаю пустой экран, и ни один из элементов не обнаруживается или не обнаруживается. Я подозреваю, что я не жду, пока страница загрузится. Но я не уверен, что это правильно. Я использую родительский URL, который перенаправил меня туда, и он загрузился в новую вкладку с веб-драйвером Chromium. Моя проблема в том, как мне войти, я пробовал множество методов, но ни один из них не удался.

Родительский URL: https://www.texasassessment.com/

Если я нажимаю на кнопку STAAR Portal, я перехожу на дочерний URL-адрес, к которому я пытаюсь войти. ,

Дочерний URL (Перенаправление): https://tx-login.ets.org/oaam_server/login.do

Если я закодирую Дочерний URL-адрес как основной для оператора Get, он никогда не загружается и просто остается белый.

enter image description here

Вот если я кодирую его с browser.get("https://tx-login.ets.org/oaam_server/login.do")

Однако, если я go на родительский URL: https://www.texasassessment.com/

И следуйте по кликам на фактический дочерний URL, он откроет новую ссылку. Код для прямого доступа к дочернему URL:

import selenium
import shutil
import xlsxwriter
import os
import unittest
import requests
import getpass
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 datetime import date

import json
with open('secrets.json','r') as f:
          config = json.load(f)

          # Definitions
          # 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

          # System Variables
          today = date.today()
          date = today.strftime("%m/%d/%Y")
          username = getpass.getuser()

          # URL Variables
          login_url = ''
          redirect_url = ''

          # WebDriver Path for Windows 10
          browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\chromedriver.exe")

          # Parent URL
          browser.get("https://tx-login.ets.org/oaam_server/login.do")

          # Credentials NEEDS TO BE ENCRYPTED AND NOT BAKED INTO THE SCRIPT NEEDS UNIT TEST
          username = browser.find_element_by_id("Username")
          password = browser.find_element_by_id("Password")
          username.send_keys(config['user']['name'])
          password.send_keys(config['user']['password'])

          # Authentication submit.click()
          # For XPATH = //*[@id='qa-button-login']
          element = WebDriverWait(browser, 20).until(
                          EC.element_to_be_clickable((By.XPATH, "//*[@id='qa-button-login']")))
          element.click();

Код, который перемещается туда и загружает фактическую страницу:

import selenium
import shutil
import xlsxwriter
import os
import unittest
import requests
import getpass
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 datetime import date

import json
with open('secrets.json','r') as f:
          config = json.load(f)

          # Definitions
          # 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

          # System Variables
          today = date.today()
          date = today.strftime("%m/%d/%Y")
          username = getpass.getuser()

          # URL Variables
          login_url = ''
          redirect_url = ''

          # WebDriver Path for Windows 10
          browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\chromedriver.exe")

          # Parent URL
          browser.get("https://www.texasassessment.com/administrators/")

          # Click on Star Portal 
          # For XPATH = /html/body/div[2]/section[1]/div/div/div/div[1]/div/div/a[3]
          element = WebDriverWait(browser, 20).until(
                          EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/section[1]/div/div/div/div[1]/div/div/a[3]")))
          element.click();

          # Credentials NEEDS TO BE ENCRYPTED AND NOT BAKED INTO THE SCRIPT NEEDS UNIT TEST
          username = browser.find_element_by_id("Username")
          password = browser.find_element_by_id("Password")
          username.send_keys(config['user']['name'])
          password.send_keys(config['user']['password'])

          # Authentication submit.click()
          # For XPATH = //*[@id='qa-button-login']
          element = WebDriverWait(browser, 20).until(
                          EC.element_to_be_clickable((By.XPATH, "//*[@id='qa-button-login']")))
          element.click();

В целом страница никогда не загружается и / или если происходит перенаправление, элементы и XPATHS никогда не обнаруживаются. Я пытаюсь войти на эту страницу с Python и Selenium: https://tx-login.ets.org/oaam_server/login.do

1 Ответ

1 голос
/ 03 февраля 2020

Используйте следующие xpath, чтобы щелкнуть.

element = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='link-group']//a[contains(.,'STAAR System')]")))
element.click();

Код здесь, вам нужно переключиться на новую вкладку.

browser = webdriver.Chrome()
browser.get("https://www.texasassessment.com/administrators/")
element = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='link-group']//a[contains(.,'STAAR System')]")))
element.click()
WebDriverWait(browser,10).until(EC.number_of_windows_to_be(2))
browser.switch_to.window(browser.window_handles[-1])
username =WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID,"userid")))
password =WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID,"pass")))
username.send_keys("username")
password.send_keys("password")
element = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='loginButton']")))
element.click()

Проверьте снимок, который я только что прокомментировал последние две строки моего кода.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...