2016-04-02 13 views
1

Python'un Selenium paketini kullanarak oturum açmayı GMail'de otomatikleştirmeye çalışıyorum.Python-Selenium kullanarak GMAIL girişini otomatikleştirme

Traceback (most recent call last): 
    File "C:\Users\Surojit\Desktop\Python\automaticpasswordFiller.py", line 21, in <module> 
    passwordElem = browser.find_element_by_id('Passwd') 
    File "C:\Users\Surojit\AppData\Local\Programs\Python\Python35-32\lib\site- packages\selenium\webdriver\remote\webdriver.py", line 266, in find_element_by_id 
    return self.find_element(by=By.ID, value=id_) 
    File "C:\Users\Surojit\AppData\Local\Programs\Python\Python35-32\lib\site- packages\selenium\webdriver\remote\webdriver.py", line 744, in find_element 
    {'using': by, 'value': value})['value'] 
    File "C:\Users\Surojit\AppData\Local\Programs\Python\Python35-32\lib\site- packages\selenium\webdriver\remote\webdriver.py", line 233, in execute 
    self.error_handler.check_response(response) 
    File "C:\Users\Surojit\AppData\Local\Programs\Python\Python35-32\lib\site- packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"Passwd"} 
Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/Surojit/AppData/Local/Temp/tmpceecsm46/extensions/[email protected] glecode.com/components/driver-component.js:10770) 
    at FirefoxDriver.prototype.findElement (file:///C:/Users/Surojit/AppData/Local/Temp/tmpceecsm46/extensions/[email protected] glecode.com/components/driver-component.js:10779) 
    at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/Surojit/AppData/Local/Temp/tmpceecsm46/extensions/[email protected] glecode.com/components/command-processor.js:12661) 
    at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/Surojit/AppData/Local/Temp/tmpceecsm46/extensions/[email protected] glecode.com/components/command-processor.js:12666) 
    at DelayedCommand.prototype.execute/< (file:///C:/Users/Surojit/AppData/Local/Temp/tmpceecsm46/extensions/[email protected]/components/command-processor.js:12608) 

yazdım basit bir koddur: Ancak, görevi başarmak ve aşağıdaki hatayı almanız mümkün değilim Ayrıca

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
import time 

browser = webdriver.Firefox() 
browser.get('http://gmail.com') 
action = webdriver.ActionChains(browser) 
emailElem = browser.find_element_by_id('Email') 
emailElem.send_keys("MyUserName") 
browser.find_element_by_name('signIn').click() 
#browser.get('https://accounts.google.com/ServiceLogin?   service=mail&continue=https://mail.google.com/mail/#password') 
passwordElem = browser.find_element_by_id('Passwd') 
passwordElem.send_keys("MyPassword") 
browser.find_element_by_name('signIn').click() 

, ben hatayı bulmak için çalıştık benim benzer bir soruya verilen bir cevabı karşılaştırarak benim kodum: Auto connect on my Gmail account with Python Selenium

Birisi bana doğru yolda yol gösterebilir ve nerede hata yaptığımı bana bildirin?

Not: Bu benim ilk gönderiimde stackoverflow var. Lütfen

+1

Bir aracı önerebilirim - Herhangi bir anda kırılabilecek bir şey yerine doğru bir API kullanabilirdiniz? https://developers.google.com/gmail/api/quickstart/python –

cevap

3

Henüz domda yüklü olmayan eleman. Sayfanın yüklenebilmesi için biraz gecikme eklemeyi deneyin.

emailElem = browser.find_element_by_id('Email') 
emailElem.send_keys('MyUserName') 
nextButton = browser.find_element_by_id('next') 
nextButton.click() 
time.sleep(1) 
passwordElem = browser.find_element_by_id('Passwd') 
passwordElem.send_keys('MyPassword') 
signinButton = browser.find_element_by_id('signIn') 
signinButton.click() 

önerilen yöntem browser.implicitly_wait(num_of_seconds) Eğer herhangi bir unsur beklemek gerektiğinde açık bekleyeceği kullanılacak sonraki element için

from selenium.webdriver.common.keys import Keys 

    def login_gmail(email,password): 

    browser.find_element_by_name('Email').send_keys(email+Keys.ENTER) 
    time.sleep(2) 
    browser.find_element_by_name('Passwd').send_keys(password+Keys.ENTER) 
+0

Teşekkürler! @ Dnit13. Bu mükemmel çalışıyor, uyku komutunu kaçırıyordum. –

0

numaralı soruya mesaj yazarken yazdığım herhangi bir hata için özür dileriz. Sorun, Gmail'in giriş yapma şeklini değiştirdi. . Daha sonra ertesi tıklayın ve ardından parolayı eklemek yeni bir sayfa almak ve oturum açma tıklayın tek bir sayfada e-posta eklemek böyle bir şey deneyin: Sen Passwd kimliği bulmaya çalışıyor

from selenium import webdriver 
browser = webdriver.Firefox() 

browser.get('http://gmail.com') 

emailElem = browser.find_element_by_id('Email') 
emailElem.send_keys('MyUserName') 
nextButton = browser.find_element_by_id('next') 
nextButton.click() 
passwordElem = browser.find_element_by_id('Passwd') 
passwordElem.send_keys('MyPassword') 
signinButton = browser.find_element_by_id('signIn') 
signinButton.click() 
1

this vurgulamak. Daha iyi daha time.sleep(1).

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 

browser = webdriver.Firefox() 
browser.get('http://gmail.com') 
wait = WebDriverWait(browser, 10) 

password_elem = wait.until(EC.presence_of_element_located((By.ID,'Passwd'))) 
password_elem.send_keys("MyPassword") 
browser.find_element_by_name('signIn').click() 

Umut, öyle size yardımcı olacaktır.

0

deneyin bir daha arama önlemek için tuşunu kullanabilirsiniz

0

Bunu yapabilirsiniz, ancak otomasyona gmail gibi bir şey önermem. İyi bir uygulama olmaz. E-postaları test etmek için - https://putsbox.com/

İlgili konular