使用Selenium for Python编写和发送Gmail

时间:2015-11-24 08:41:39

标签: python selenium-webdriver

我刚刚开始在Python上使用selenium,在完成快速教程后,我正在尝试使用它来创建一个程序,该程序将登录Gmail,然后向选定的电子邮件地址发送电子邮件。

我已经完成了登录部分但是在编写新的电子邮件部分时遇到了一些问题(只在某些时候有效)并且每次编写邮件正文时都会遇到问题。

我的代码如下,我已经尝试阅读文档,但我无法在Gmail中使用以下内容,而当我检查gmail中的元素时,它似乎比这里示例中的基本html结构复杂得多:

http://selenium-python.readthedocs.org/locating-elements.html#locating-elements-by-tag-name

"""
Write a program that takes an email address and string of text on the command line and then, using Selenium,
logs into your email account and sends an email of the string to the provided address. 
"""

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

browser = webdriver.Chrome()
browser.get('http://www.gmail.com')

emailElem = browser.find_element_by_id('Email')
emailElem.send_keys('My_email@gmail.com')
emailElem.submit()

time.sleep(2)

passwordElem = browser.find_element_by_id('Passwd')
passwordElem.send_keys('My_password_here')
passwordElem.submit()


time.sleep(2)

composeElem = browser.find_element_by_class_name('z0') #this only works half of the time
composeElem.click()

time.sleep(7)

toElem = browser.find_element_by_name("to")
toElem.send_keys('my_other_email@gmail.com')

time.sleep(2)

subjElem = browser.find_element_by_name("subjectbox")
subjElem.send_keys('Test with selenium')

time.sleep(2)

bodyElem = browser.find_element_by_???('???') #this is where I get stuck and not sure what to do here
bodyElem.send_keys('A test email with selenium')

time.sleep(2)

sendElem = browser.find_element_by_link_text('send') #not sure if this is correct too
sendElem.submit()

4 个答案:

答案 0 :(得分:1)

我认为在加载页面上选择元素的最简单方法是通过css选择器找到它们。您可以在浏览器检查器中找到它们,然后复制它们唯一的css选择器(在firefox中检查元素 - >复制唯一选择器)。在这种情况下,这应该有效:

browser.find_element_by_css_selector('#\:nw')

答案 1 :(得分:1)

请尝试:

time.sleep(10)

bodyElem = browser.find_element_by_xpath("//*[@id=":ov"]")

OR

bodyElem = browser.find_element_by_xpath("//*[@id=":ou"]")

我认为它需要更多的时间来找到元素,所以我增加了睡眠时间,并且xpath也应该有效。

答案 2 :(得分:0)

由于ID每次都在变化,我们可以检查aria-label:

browser.find_element_by_css_selector("div[aria-label='Message Body']")

对于send,请使用:

sendElem = browser.find_element_by_xpath("//div[text()='Send']")
sendElem.click()

答案 3 :(得分:0)

您也可以在找到消息框后使用以下内容破解它(我是一个菜鸟,但无法发送到工作中)

sendElem.send_keys(Keys.TAB) sendElem.send_keys(Keys.CONTROL + Keys.RETURN)