Создание программы на Python, которая регистрирует вас по электронной почте

Итак, я новичок, и у меня возникла проблема. Итак, это часть моей программы:

browser = webdriver.Chrome()
browser.get(('https://accounts.google.com/signin'
         '/v2/sl/pwd?service=mail&passive=tru'
         'e&rm=false&continue=https%3A%2F%2Fmai'
         'l.google.com%2Fmail%2F&ss=1&scc=1&ltmp'
         'l=default&ltmplcache=2&emr=1&osid=1&f'
         'lowName=GlifWebSignIn&flowEntry=AddSe'
         'ssion&cid=0&navigationDirection=forward'))

username = browser.find_element_by_id('identifierId')
username.send_keys(usernameStr)

nextButton = browser.find_element_by_id('identifierNext')
nextButton.click()

password = WebDriverWait(browser, 10).until(
   EC.presence_of_element_located(By.CLASS_NAME('whsOnd zHQkBf')))

password.send_keys(passwordStr)

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

Но я не могу заставить его работать с паролем. В имени пользователя есть тег ID, и вы можете легко найти элемент по идентификатору, но пароль не имеет этого. Это пароль HTML:

<input type = "password" class = "whsOnd zHQkBf" jsname = "YPqjbf" autocomplete = "current-password" spellcheck = "false" tabindex = "0" aria-label = "Vnesite geslo" name = "password" autocapitalize = "off" autocorrect = "off" dir = "ltr" data-initial-dir = "ltr" data-initial-value = "">

Я пробовал назвать это именем класса или текстом ссылки, но он просто не работает. Спасибо за все ответы

Вы пробовали EC.presence_of_element_located(By.CLASS_NAME('whsOnd')))

Will Keeling 17.12.2018 14:49

Почему бы не искать input [type = password], так как будет только один

Jaquarh 17.12.2018 14:52

По-прежнему появляется сообщение «! TypeError: объект 'str' не вызывается», несмотря ни на что

Tim 17.12.2018 15:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
91
3

Ответы 3

Ссылка ниже предназначена для селена, но она должна работать одинаково с Chrome: find_element_by_tag_name ("input") или find_element_by_name ("password") должны работать как
https://selenium-python.readthedocs.io/locating-elements.html

Независимо от того, что я пробую, он продолжает выдавать ошибку:! TypeError: объект 'str' не вызывается ". Однако он работал с именем пользователя. Есть идеи?

Tim 17.12.2018 15:43

щелкнуть первым? см. sqa.stackexchange.com/questions/18415/…

B. Go 17.12.2018 15:55

"начальное-значение-данные" - это то, что изменяется, когда я набираю поле. Скорее всего можно установить напрямую !? См. stackoverflow.com/questions/38172977/…

B. Go 17.12.2018 15:58

Нет необходимости сначала нажимать. Он уже нажат, как и с именем пользователя.

Tim 17.12.2018 16:00

При осмотре текстовая часть - input.whsOnd.zHQkBf (части класса). Может надо эти уточнить? Вы видели комментарий js? это может не работать в обоих направлениях, поскольку заполнение формы изменяет аргумент, но заполнение аргумента не приводит к заполнению формы ...

B. Go 17.12.2018 16:06
stackoverflow.com/questions/44738306/…
B. Go 17.12.2018 16:19

Спасибо за помощь, B.Go, но мне не очень помогло то, что вы опубликовали.

Я решил переписать код, используя ту же логику, что и в первой части.

time.sleep(1)
password1 = browser.find_element_by_name("password")
password1.send_keys(passwordStr)

Теперь это волшебным образом работает. Спасибо за помощь

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

import smtplib

server=smtplib.SMTP("smtp.gmail.com", 587)          #when you use gmail
server.starttls()
server.user = "your@email"
server.password = "yourPassword"
server.login(server.user, server.password)
msg = "Hello world"
server.sendmail("your@email", ["receiver@email", "also more"], msg)
server.quit()

MFG

Другие вопросы по теме