我正在尝试使用Python中的Selenium用我的GMail帐户自动登录,但出现此错误:
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
我的代码如下所示:
#!/usr/bin/python # coding: utf8 import scrapy from selenium import webdriver from scrapy.selector import Selector from selenium.webdriver.common.action_chains import ActionChains from scrapy.contrib.spiders import CrawlSpider from scrapy.selector import HtmlXPathSelector from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.http import Request, FormRequest from scrapy import log from scrapy.exceptions import DropItem from scrapy import signals from selenium.webdriver.common.by import By import scrapy from scrapy import signals from scrapy.http import TextResponse from scrapy.xlib.pydispatch import dispatcher from selenium import webdriver from selenium.webdriver.common.keys import Keys class googleplay(CrawlSpider): name = "selenium" flag = True def __init__(self): self.driver = webdriver.Firefox() self.driver.get('http://gmail.com') action = webdriver.ActionChains(self.driver) #User name input field identification and data entered usernametext = self.driver.find_element_by_name('Email') usernametext.send_keys("myemailaddress@gmail.com") #put your actual username self.driver.find_element_by_name('signIn').click() time.sleep(2) #Password input field identification and data entered passwordtext = self.driver.find_element_by_name('Passwd') passwordtext.send_keys("password") #put your actual password key = self.driver.find_element_by_name('signIn') print "----------------------" key.click() print "----------------------" start_urls = ["https://www.mywebsite.com"] def parse(self, reponse): #Loading the gmail URL print "toto"
我该如何解决我的问题?
尝试更改网址。使用https://accounts.google.com/ServiceLogin?service=mail#identifier代替http://gmail.com。
https://accounts.google.com/ServiceLogin?service=mail#identifier
http://gmail.com
确保使用原始电子邮件和密码。并更改self.driver.find_element_by_name到self.driver.find_element_by_id每个元素。
self.driver.find_element_by_name
self.driver.find_element_by_id
您的代码将是:
#!/usr/bin/python # coding: utf8 import scrapy import time from selenium import webdriver from scrapy.selector import Selector from selenium.webdriver.common.action_chains import ActionChains from scrapy.contrib.spiders import CrawlSpider from scrapy.selector import HtmlXPathSelector from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.http import Request, FormRequest from scrapy import log from scrapy.exceptions import DropItem from scrapy import signals from selenium.webdriver.common.by import By from scrapy import signals from scrapy.http import TextResponse from scrapy.xlib.pydispatch import dispatcher from selenium import webdriver from selenium.webdriver.common.keys import Keys class googleplay(CrawlSpider): name = "selenium" flag = True def __init__(self): self.driver = webdriver.Firefox() self.driver.get('http://gmail.com') action = webdriver.ActionChains(self.driver) #User name input field identification and data entered usernametext = self.driver.find_element_by_name('Email') usernametext.send_keys("myemail@gmail.com") #put your actual username self.driver.find_element_by_name('signIn').click() #Password input field identification and data entered passwordtext = self.driver.find_element_by_id('Passwd') passwordtext.send_keys("mypassword") #put your actual password self.driver.find_element_by_id('signIn').click() print "----------------------" #key.click() print "----------------------" start_urls = ["https://www.mywebsite.com"] def parse(self, reponse): #Loading the gmail URL print "toto"