Auto connect on my Gmail account with Python Selen

2019-03-06 17:51发布

I am trying to auto-login with my GMail account with Selenium in Python, but I am getting this error:

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

My code looks like this:

#!/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"

How I can fix my problem?

1条回答
戒情不戒烟
2楼-- · 2019-03-06 18:41

Try changing the url. Use https://accounts.google.com/ServiceLogin?service=mail#identifier instead of http://gmail.com.

Make sure you use your original email and password. And change self.driver.find_element_by_name to self.driver.find_element_by_id for every element.

Your code will be:

#!/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" 
查看更多
登录 后发表回答