【问题标题】:Auto connect on my Gmail account with Python Selenium使用 Python Selenium 自动连接我的 Gmail 帐户
【发布时间】:2015-11-14 13:18:08
【问题描述】:

我正在尝试使用 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"

如何解决我的问题?

【问题讨论】:

  • 您确定不想为此使用API
  • 你试过改变网址吗?使用https://accounts.google.com/ServiceLogin?service=mail#identifier 而不是http://gmail.com
  • 我需要使用 selenium 来报废一些信息,经过身份验证后......

标签: python selenium scrapy


【解决方案1】:

尝试更改网址。使用https://accounts.google.com/ServiceLogin?service=mail#identifier 而不是http://gmail.com

确保使用您的原始电子邮件和密码。并将每个元素的 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" 

【讨论】:

  • 对我来说工作正常。您还需要导入时间模块:import time。您也可以尝试更改此行usernametext = self.driver.find_element_by_id('Email')
  • 并确保使用您的原始电子邮件和密码。并将每个元素的 self.driver.find_element_by_name 更改为 self.driver.find_element_by_id
  • 是的,我的电子邮件和密码都很好......如果我将self.driver.find_element_by_name('signIn').click() 更改为self.driver.find_element_by_id('signIn').click(),我也会遇到同样的错误:`selenium.common.exceptions.ElementNotVisibleException: Message: Element当前不可见,因此可能无法与之交互`
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多