python - 在 Python 中使用 Selenium 登录 gmail

标签 python selenium selenium-webdriver

我正在尝试使用 Selenium 登录 gmail。在新的 gmail 登录中,首先输入您的电子邮件 ID,然后在下一页输入密码。电子邮件页面和密码页面的 URL,两者不同。因此,当我在 driver.get 中传递密码 URL 时,它会重新加载页面,如果您在不输入密码的情况下刷新 URL,它会重定向到电子邮件页面。因此,它缺少密码字段选择器。 current_url 还是之前的url,即邮件页面的url。这是我的代码。我正在使用 chrome 驱动程序和 python 2.X

import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = "/Documents/chromedriver" # Path to chrome-driver
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)

# Email insert 

driver.get("https://accounts.google.com/signin/v2/identifier?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin")  #URL of email page
username = driver.find_element_by_id("identifierId")
username.send_keys("myemail")
driver.find_element_by_id("identifierNext").click()


# Password Insert 

driver.get("https://accounts.google.com/signin/v2/identifier?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin")  # URL of password page
password = driver.find_element_by_id("password")
password.send_keys("mypassword")
driver.find_element_by_id("passwordNext").click()

#driver.quit()

最佳答案

这是您问题的答案:

当我们使用 Selenium 3.4.3geckodriver v0.17.0Mozilla Firefox 53.0 使用 Python 3.6.1,我们可以使用任一定位器 xpath css_selector 通过 Gmail 的登录模块 v2 登录我们各自的 Gmail 帐户。


使用 XPATH:

以下是使用 xpath 登录 Gmail 的示例代码:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
caps = DesiredCapabilities().FIREFOX
caps["marionette"] = True
driver = webdriver.Firefox(capabilities=caps, firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")

driver.get("https://accounts.google.com/signin")
email_phone = driver.find_element_by_xpath("//input[@id='identifierId']")
email_phone.send_keys("your_emailid_phone")
driver.find_element_by_id("identifierNext").click()
password = WebDriverWait(driver, 5).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@name='password']"))
)
password.send_keys("your_password")
driver.find_element_by_id("passwordNext").click()

使用 CSS_SELECTOR:

以下是使用 css_selector 登录 Gmail 的示例代码:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
caps = DesiredCapabilities().FIREFOX
caps["marionette"] = True
driver = webdriver.Firefox(capabilities=caps, firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")

driver.get("https://accounts.google.com/signin")
email_phone = driver.find_element_by_css_selector("#identifierId")
email_phone.send_keys("your_emailid_phone")
driver.find_element_by_css_selector(".ZFr60d.CeoRYc").click()
password = WebDriverWait(driver, 5).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "input[class='whsOnd zHQkBf'][type='password']"))
)
password.send_keys("your_password")
driver.find_element_by_css_selector(".ZFr60d.CeoRYc").click()

关于python - 在 Python 中使用 Selenium 登录 gmail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44856887/

相关文章:

java - 尝试关闭控制台中的警告但失败

python - 如何使用 python selenium 循环 html 元素以单击页面中的每个元素?

java - 如何使用 Selenium WebDriver 和 Java 从下拉列表中选择一个选项?

java - 始终等待页面加载到 PageObjects 上

python - 在 Flask 中,如何在单击按钮时生成动态 URL?

python - 为什么我会收到此错误? '_io.TextIOWrapper' 对象没有属性 'append'

python - 根据 ndarray 中的索引设置值的通用方法?

java - 如何获取 div 中子项的计数甚至文本列表

python - Tkinter 框架相互干扰

selenium - 如何在cucumber-jvm中的另一个功能中调用一个功能?