селен не может найти элемент - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь написать код для автоматического создания Gmail с использованием селена.элемент, который я пытаюсь найти, является вводом имени в URL ниже:

https://accounts.google.com/signup/v2/webcreateaccount?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&flowName=GlifWebSignIn&flowEntry=SignUp

я использовал wait, но он возвращает ошибку TimeoutException.также, скажем, я хочу использовать неявное ожидание, как я могу это сделать?

спасибо

class BotCreator:

    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname
        self.driver = webdriver.Firefox(executable_path=r'A:\Python Projects\The InstaBOT/geckodriver')

    def shutdown(self):
        self.driver.close

    def gmail_creator(self, n_bots):
        for n in range(n_bots):
            global email
            email = {}
            driver = self.driver
            wait = WebDriverWait(driver, 10)
            driver.get('https://www.google.com/intl/en-GB/gmail/about/')
            driver.find_element_by_xpath('//a[@title="Create an account"]').click()
            wait.until(ec.new_window_is_opened(driver.window_handles))
            after = driver.window_handles[1]
            driver.switch_to.window(after)
            element = wait.until(ec.element_to_be_clickable((By.XPATH, '//input[@id="firstName"]')))
            element.send_keys('awsd')

        return email

gmail_t = BotCreator('John', 'Hoffinsky')
gmail_t.gmail_creator(1)

Ответы [ 3 ]

2 голосов
/ 24 сентября 2019

На этой странице фактически есть несколько (4) элементов с одинаковым XPath.Попробуйте использовать определенный со следующим XPath:

(//a[@title="Create an account"])[1]

Ваш XPath возвращает 4 элемента с расширением Chrome ChroPath .


Относительно вашего вопроса о неявномwait: вы уже используете неявное ожидание.Параметр неявного ожидания указывает Selenium опрашивать в течение указанного периода времени, пока элемент не станет доступен.При необходимости вы можете изменить время ожидания:

driver.implicitly_wait(15)

Эта ссылка может быть полезна.

1 голос
/ 24 сентября 2019

После того, как вы нажмете кнопку «Создать учетную запись», откроется новое окно с информацией о пользователе. Вам нужно переключиться в это окно, чтобы получить доступ к элементу. Попробуйте следующий код.

wait = WebDriverWait(driver, 10)
driver.get('https://www.google.com/intl/en-GB/gmail/about/')
driver.find_element_by_xpath('//a[@title="Create an account"]').click()
wait.until(ec.new_window_is_opened(driver.window_handles))
after=driver.window_handles[1]
driver.switch_to.window(after)
element = wait.until(ec.element_to_be_clickable((By.XPATH, '//input[@id="firstName"]')))
element.send_keys('awsd')

Снимок браузера:

enter image description here

0 голосов
/ 24 сентября 2019

Всегда лучше использовать ID, чем XPath / CSS

Пример

driver.find_element_by_id("FirstName").send_keys("email")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...