Как щелкнуть текстовое поле и ввести текст, используя селен в Python? - PullRequest
0 голосов
/ 15 апреля 2020

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

Код

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument("--test-type")
driver = webdriver.Chrome(executable_path = r'C:\Users\user\Downloads\chromedriver_win32\chromedriver.exe')
driver.get("https://accounts.google.com/signin/v2/identifier?passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2F&followup=https%3A%2F%2Fdocs.google.com%2F&emr=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin")
text_area= driver.find_element_by_xpath('//*[@id="view_container"]/div/div/div[2]/div/div[1]/div/form/span/section/div/div/div[1]/div/div[1]/div/div[2]')
text_area.click()
text_area.send_keys(email_address)

Код открывает страницу, которая, если кому-то интересно или это может повлиять на мой код, является страницей входа, когда вы go заходите в Документы Google на гостевой учетной записи, нажимает на текстовое поле для входа и не может набрать любой текст. В тот момент, когда код должен набирать текст, я получаю эту ошибку.

Ошибка

Traceback (most recent call last):
  File "file.py", line 8, in <module>
    text_area.click()
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <div class="i9lrp mIZh1c"></div> is not clickable at point (508, 242). Other element would receive the click: <input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Email or phone" name="identifier" value="" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="">
  (Session info: chrome=81.0.4044.92)

По общему признанию, это немного над моей головой и Мне интересно, если кто-нибудь может знать, как исправить эту ошибку, и как они узнали, как это сделать, поскольку мои следующие разумные шаги - ввести пароль, выбрать новый документ и ввести текст в Google Do * 1019. *.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

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

text_area= driver.find_element_by_xpath("//input[@name='identifier']")
1 голос
/ 15 апреля 2020

Вы можете использовать ждет , то есть:

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
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome(executable_path="C:\Users\user\Downloads\chromedriver_win32\chromedriver.exe")
driver.maximize_window()
driver.get("https://accounts.google.com/signin/v2/identifier?passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2F&followup=https%3A%2F%2Fdocs.google.com%2F&emr=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin")
wait = WebDriverWait(driver, 10)

# usr
el = wait.until(EC.visibility_of_element_located((By.ID, "identifierId")))
el.send_keys("username@gmail.com")
el.send_keys(Keys.ENTER)

# pwd
el = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@type='password']")))
el.send_keys("XXXXX")
el.send_keys(Keys.ENTER)

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