Python Forum
How to enter value in gmail id and password - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html)
+--- Thread: How to enter value in gmail id and password (/thread-5996.html)



How to enter value in gmail id and password - ratanbhushan - Nov-01-2017



hi Team

I am new to Python and try to crawl gmail without using any google or gmail API.

please advise me how can i pass value to gmail id and password and then click using BeautifulSoup.

I am using IDLE python 3

THanks
Ratan


RE: How to enter value in gmail id and password - metulburr - Nov-01-2017

it would probably be easier with selenium to login and get the page content and then pass it to BS
from selenium import webdriver
from bs4 import BeautifulSoup
import time

EMAIL = ''
PASSWORD = ''
CHROMEPATH = ''

login_url = 'https://www.google.com/accounts/Login'
browser = webdriver.Chrome(CHROMEPATH)
browser.set_window_position(0,0)
browser.get(login_url)
time.sleep(2)
browser.find_element_by_id("identifierId").send_keys(EMAIL)
browser.find_element_by_id("identifierNext").click()
time.sleep(2)
browser.find_element_by_name("password").send_keys(PASSWORD)
browser.find_element_by_id("passwordNext").click()
time.sleep(2)

soup = BeautifulSoup(browser.page_source, 'html.parser')



RE: How to enter value in gmail id and password - ratanbhushan - Nov-02-2017

Hey thanks for this

I ll try selenium

tell me can we use something else other than sleep i mean is there any way to wait until the page loads


RE: How to enter value in gmail id and password - metulburr - Nov-02-2017

You can wait until an element exists

from selenium.webdriver.support.wait import WebDriverWait
element = WebDriverWait(driver, 10).until(
    lambda x: x.find_element_by_id("someId"))
or
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
And there are other variations http://www.obeythetestinggoat.com/how-to-get-selenium-to-wait-for-page-load-after-a-click.html


RE: How to enter value in gmail id and password - wavic - Nov-02-2017

Hm! I was using selenium several times and there is a delay when opening a web page.  Perhaps it returns when this is done?


RE: How to enter value in gmail id and password - metulburr - Nov-02-2017

the time it takes to load a webpage can be different for each person, depending on your internet speed and computer, etc.

@OP I added the above example in for wait until elements
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
 
EMAIL = ''
PASSWORD = ''
CHROMEPATH = ''
 
login_url = 'https://www.google.com/accounts/Login'
browser = webdriver.Chrome(CHROMEPATH)
browser.set_window_position(0,0)
wait = WebDriverWait(browser, 2)
presence = EC.presence_of_element_located
visible = EC.visibility_of_element_located

browser.get(login_url)

wait.until(presence((By.ID, 'identifierId')))
browser.find_element_by_id("identifierId").send_keys(EMAIL)
browser.find_element_by_id("identifierNext").click()

wait.until(presence((By.NAME, 'password')))
browser.find_element_by_name("password").send_keys(PASSWORD)
browser.find_element_by_id("passwordNext").click()

wait.until(visible((By.CSS_SELECTOR, '#gb > div.gb_zd.gb_5d > div.gb_yc.gb_lb.gb_xc.gb_Zd > div > div.gb_ib.gb_4c.gb_yg.gb_R.gb_pf.gb_pb > div > a > span')))
soup = BeautifulSoup(browser.page_source, 'html.parser')
print(soup.prettify())