Итак, я новичок, и у меня возникла проблема. Итак, это часть моей программы:
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<mp'
'l=default<mplcache=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 = "">
Я пробовал назвать это именем класса или текстом ссылки, но он просто не работает. Спасибо за все ответы
Почему бы не искать input [type = password], так как будет только один
По-прежнему появляется сообщение «! TypeError: объект 'str' не вызывается», несмотря ни на что
Ссылка ниже предназначена для селена, но она должна работать одинаково с Chrome: find_element_by_tag_name ("input") или find_element_by_name ("password") должны работать как
https://selenium-python.readthedocs.io/locating-elements.html
Независимо от того, что я пробую, он продолжает выдавать ошибку:! TypeError: объект 'str' не вызывается ". Однако он работал с именем пользователя. Есть идеи?
щелкнуть первым? см. sqa.stackexchange.com/questions/18415/…
"начальное-значение-данные" - это то, что изменяется, когда я набираю поле. Скорее всего можно установить напрямую !? См. stackoverflow.com/questions/38172977/…
Нет необходимости сначала нажимать. Он уже нажат, как и с именем пользователя.
При осмотре текстовая часть - input.whsOnd.zHQkBf (части класса). Может надо эти уточнить? Вы видели комментарий js? это может не работать в обоих направлениях, поскольку заполнение формы изменяет аргумент, но заполнение аргумента не приводит к заполнению формы ...
Спасибо за помощь, 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
Вы пробовали
EC.presence_of_element_located(By.CLASS_NAME('whsOnd')))