Отправка ключей в текстовое поле с помощью Selenium в Python Не работает - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь установить текст в следующее текстовое поле -

<input type="text" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="off" spellcheck="false" tabindex="0" aria-label="First name" name="firstName" value="" autocapitalize="sentences" id="firstName" data-initial-value="" badinput="false">

Используя следующий python код -

import time
import pandas as pd
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

exe_path = '/usr/local/bin/chromedriver'

driver = webdriver.Chrome(exe_path)
driver.implicitly_wait(10)


driver.get('https://support.google.com/mail/answer/56256?hl=en')
driver.find_element_by_class_name('action-button').click()

f = driver.find_element_by_id('firstName').send_keys('hfsjdkhf')

Он находит элемент и но курсор просто остается там некоторое время, и я получаю следующую ошибку -

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="firstName"]"}
  (Session info: chrome=80.0.3987.132)

Как мне это исправить ??

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Проблема в том, что после нажатия на action-button, который открывает новую вкладку, селен продолжает активироваться на старой вкладке, как вы можете видеть с помощью print(driver.current_url), решение ждет пару секунд, а затем переключается на новую вкладку с driver.switch_to_window(driver.window_handles[1]), то есть:

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

exe_path = '/usr/local/bin/chromedriver'
driver = webdriver.Chrome(exe_path)
wait = WebDriverWait(driver, 10)

driver.get('https://support.google.com/mail/answer/56256?hl=en')
el = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "action-button")))
el.click()
wait.until(EC.number_of_windows_to_be(2)) # wait new tab
driver.switch_to_window(driver.window_handles[1]) # switch to newly opened tab
# now you can send the keys to id firstName
el = wait.until(EC.element_to_be_clickable((By.ID, "firstName")))
el.send_keys('username')
0 голосов
/ 24 апреля 2020

Ниже могут быть причины, по которым вы не можете нажать на веб-элемент.

  1. Webelement может быть внутри фреймов. Поэтому вам нужно переключиться на фреймы и затем попытаться нажать.
  2. Установите явное ожидание, пока элемент не станет видимым, а затем попробуйте щелкнуть.
  3. Возможно, xpath не уникален для этого элемента, убедитесь, что элемент имеет уникальный xpath.

Укажите URl или dom детали для получения дополнительной помощи.

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