Как отправить текст в поле ввода внутри фрейма с помощью Python Selenium - PullRequest
0 голосов
/ 03 сентября 2018

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

Вот мой код:

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

url = 'http://www.valor.com.br'
path_to_chromedriver = 'chromedriver' 
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
browser.get(url)
browser.find_element_by_id("login-valor").click()
wait = WebDriverWait(browser,10)
WebEl = wait.until(EC.presence_of_element_located((By.ID,'cadunLoginModal')))

browser.switch_to_frame(browser.find_element_by_id("cadunLoginModal").find_element_by_tag_name("iframe"))
browser.find_element_by_id("login").send_keys("teste")

Я пытаюсь отправить 'teste' в поле для входа, но ничего не появляется.

Если я заменю последнюю строку попыткой щелчка ...

browser.find_element_by_id("login").click()

... Я получаю следующее сообщение:

  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Element <iframe src="https://login.globo.com/login/6668?url=&amp;tam=WIDGET" style="height: 100%; width: 100%;" cd_frame_id_="4bed04b195abe0173e2400a792245d31"></iframe> is not clickable at point (599, 298). Other element would receive the click: <iframe src="https://login.globo.com/login/6668?url=&amp;tam=WIDGET" style="height: 100%; width: 100%;"></iframe>
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.41.578706 (5f725d1b4f0a4acbf5259df887244095596231db),platform=Mac OS X 10.13.6 x86_64)

Похоже, что поле не было видно, но это так.

Не могли бы вы помочь пролить свет на этот вопрос? Большое спасибо.

1 Ответ

0 голосов
/ 04 сентября 2018

В соответствии с url http://www.valor.com.br для отправки последовательности символов в поле для входа необходимо:

  • Индуцирование WebDriverWait для элемента с текстом Логин для нажатия .
  • Индуцируйте WebDriverWait для того, чтобы требуемый кадр был доступен, и переключитесь на него .
  • Индуцировать WebDriverWait для элемента ввода E-mail , который можно активировать по клику.
  • Вы можете использовать следующее решение.
  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC
    
    url = 'http://www.valor.com.br'
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    browser.get(url)
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li.topo_login>a.login-valor.login-globo"))).click()
    WebDriverWait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src='https://login.globo.com/login/6668?url=&tam=WIDGET']")))
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-invalid.ng-invalid-required[name='login']"))).send_keys("teste")
    
  • Снимок браузера:

teste

...