为Python编写并发送带有Selenium的Gmail

2024-04-26 23:21:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始在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()

Tags: andofthenamebrowsersendbytime
3条回答

由于id每次都在更改,我们可以检查aria标签:

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

对于send,请使用以下命令:

^{pr2}$

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

browser.find_element_by_css_selector('#\:nw')

请尝试:

time.sleep(10)

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

或者

^{pr2}$

我假设查找元素所需的时间不多,所以我增加了睡眠时间,并给出了xpath应该可以工作的条件。在

相关问题 更多 >