Вход в скрипт во всплывающем окне. Нет такого элемента - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь получить скрипт входа, чтобы выбрать ввод имени пользователя для ввода в мое имя пользователя. После того, как это всплывающее окно будет сделано, появится еще один, запрашивающий пароль. Я новичок в Python и веб-интерфейсах, поэтому мне сложно определить, какой элемент веб-сайта мне нужно выбрать, чтобы заставить это работать. Вот код, который у меня есть.

import selenium
from selenium import webdriver

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

DynamoForum = webdriver.Chrome()
DynamoForum.get("https://forum.dynamobim.com/")

login = DynamoForum.find_element_by_class_name("header-buttons").click()

#DynamoForum.switch_to_frame(DynamoForum.find_element_by_
#wait(DynamoForum,10).until(EC.frame_to_be_available_and_switch_to_it(
DynamoForum.find_element_by_xpath("//title[1]")))


wait(DynamoForum,10).until(EC.frame_to_be_available_and_switch_to_it(
DynamoForum.find_element_by_xpath(
"//iframe[@id='destination_publishing_iframe_autodesk_0']")))

DynamoForum.find_element_by_id("userName").send_heys("xxx")

Сайт открывается, и всплывающее окно запускается, но текст не вводится. Вот что я получил в результате:

Traceback (most recent call last):
  File "C:/Users/cjr/PycharmProjects/DynamoForum/DynamoForum.py", line 17, in <module>
    wait(DynamoForum, 10).until(EC.frame_to_be_available_and_switch_to_it(DynamoForum.find_element_by_xpath("//iframe[@id='destination_publishing_iframe_autodesk_0']")))
  File "C:\Users\cjr\PycharmProjects\DynamoForum\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\cjr\PycharmProjects\DynamoForum\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\Users\cjr\PycharmProjects\DynamoForum\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\cjr\PycharmProjects\DynamoForum\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//iframe[@id='destination_publishing_iframe_autodesk_0']"}
  (Session info: chrome=72.0.3626.119)
  (Driver info: chromedriver=73.0.3683.20 (8e2b610813e167eee3619ac4ce6e42e3ec622017),platform=Windows NT 10.0.17134 x86_64)

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Обычно, когда вы нажимаете кнопку login, вы переходите к другой window, и для доступа к элементу в новом window вам необходимо переключить его из окна parent, чтобы получить доступ к этому. Попробуйте приведенный ниже кодэто должно работать.

    from selenium import webdriver
        DynamoForum = webdriver.Chrome()
        DynamoForum.get("https://forum.dynamobim.com/")
        Parent_window = DynamoForum.window_handles[0]
        login = DynamoForum.find_element_by_class_name("header-buttons").click()
        window_child= DynamoForum.window_handles[1]
        DynamoForum.switch_to.window(window_child)
        DynamoForum.find_element_by_id("userName").send_keys("xyz@gmail.com")
        DynamoForum.find_element_by_id("verify_user_btn").click()
        wait=WebDriverWait(DynamoForum,20)

     wait.until(EC.visibility_of_element_located((By.ID,"password"))).send_keys("xxx")
       DynamoForum.find_element_by_id("btnSubmit").click()

enter image description here

0 голосов
/ 05 марта 2019

Вам нужно переключиться на iframe.

например,

iframe = driver.find_element_by_id('destination_publishing_iframe_autodesk_0')
driver.switch_to.frame(iframe)
driver.find_element_by_name('userName').send_keys('xxx')

См. Функцию switch_to здесь: https://selenium -python.readthedocs.io / api.html? Highlight = iframe

Для справки:

Python Selelen не может найти iframe xpath

https://seleniumwithjavapython.wordpress.com/selenium-with-python/intermediate-topics/handling-iframes-in-a-webpage/

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