Python w/Selenium Gmail电子邮件自动发送至:Field给我带来了麻烦

Python w/Selenium Gmail电子邮件自动发送至:Field给我带来了麻烦,python,selenium,automation,gmail,Python,Selenium,Automation,Gmail,最终目标是在我的公共ip地址发生变化时给自己发送一封电子邮件,因为我没有动态dns,必须自己手动输入web服务器的ip地址。我已经尽了我所能尝试让bash实用程序为我完成这项工作,但不幸的是,无论我如何配置出站邮件,CenturyLink都会阻止我 因此,我转向了图形化python/selenium网页自动化,它将为我登录我的gmail帐户,单击“撰写”按钮,然后输入收件人:、主题:、文本段并点击发送。除了一个小部分——To:字段外,一切都正常。无论我如何尝试使用html/css选择字段,htm

最终目标是在我的公共ip地址发生变化时给自己发送一封电子邮件,因为我没有动态dns,必须自己手动输入web服务器的ip地址。我已经尽了我所能尝试让bash实用程序为我完成这项工作,但不幸的是,无论我如何配置出站邮件,CenturyLink都会阻止我

因此,我转向了图形化python/selenium网页自动化,它将为我登录我的gmail帐户,单击“撰写”按钮,然后输入收件人:、主题:、文本段并点击发送。除了一个小部分——To:字段外,一切都正常。无论我如何尝试使用html/css选择字段,html/css在这方面都不同于其他所有html/css

driver.find_element_by_class_name()

我似乎无法填写这个字段。Bash会给我一个错误,比如

:lo cannot be reached by keyboard 
或 text区域#:lo.vO不是有效的选择器

当我执行inspect元素时,元素如下所示:

<textarea rows="1" id=":lo" class="vO" name="to" spellcheck="false" autocomplete="false" autocapitalize="off" autocorrect="off" tabindex="1" dir="ltr" aria-label="To" role="combobox" aria-autocomplete="list" style="width: 462px;"></textarea>

你试过使用Gmail API吗? 它比使用硒更容易、更快、更有效

以下是快速入门:


(我之所以写答案,是因为我没有名声只发表评论)

你试过使用Gmail API吗? 它比使用硒更容易、更快、更有效

以下是快速入门:


(我之所以写答案,是因为我没有只发表评论的名声)

您也可以使用Python内置的电子邮件包:


您还可以使用Python内置的电子邮件包:


我认为不同浏览器中的元素ID似乎存在动态变化。对于我来说,当我试图编写邮件来获取XPATH时,我注意到XPATH是
/*[@id=“:oa”]
,但当脚本启动时,它是
/*[@id=“:my”]

为了适应这种情况,我使用了使用XPATH的元素查询
//textarea[1]
,因为Recipients部分总是第一个
textarea
。事实证明,这在不同的浏览器会话中可以很好地一致工作

代码片段

>>> d = webdriver.Chrome()
[14424:7728:0809/135301.805:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2

DevTools listening on ws://127.0.0.1:12582/devtools/browser/31a5ab42-a4d2-46f3-95c6-a0c9ddc129d7
>>> d.get('https://www.gmail.com')
>>> d.find_element_by_xpath(xpath)
<selenium.webdriver.remote.webelement.WebElement (session="6072286733856e53b69af89ea981001c", element="0.42218760484088036-1")>
>>> d.find_element_by_xpath('//textarea[1]').send_keys('cswadhikar@gmail.com')
>d=webdriver.Chrome()
[14424:7728:0809/135301.805:错误:install_util.cc(597)]无法读取注册表值HKLM\SOFTWARE\Policys\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken以写入结果=2
开发工具在ws://127.0.0.1:12582/DevTools/browser/31a5ab42-a4d2-46f3-95c6-a0c9ddc129d7上侦听
>>>得https://www.gmail.com')
>>>d.通过xpath(xpath)查找元素
>>>d.通过xpath('//textarea[1]')查找元素cswadhikar@gmail.com')
结果

>>> d = webdriver.Chrome()
[14424:7728:0809/135301.805:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2

DevTools listening on ws://127.0.0.1:12582/devtools/browser/31a5ab42-a4d2-46f3-95c6-a0c9ddc129d7
>>> d.get('https://www.gmail.com')
>>> d.find_element_by_xpath(xpath)
<selenium.webdriver.remote.webelement.WebElement (session="6072286733856e53b69af89ea981001c", element="0.42218760484088036-1")>
>>> d.find_element_by_xpath('//textarea[1]').send_keys('cswadhikar@gmail.com')

我认为不同浏览器中的元素ID似乎存在动态变化。对于我来说,当我试图编写邮件来获取XPATH时,我注意到XPATH是
/*[@id=“:oa”]
,但当脚本启动时,它是
/*[@id=“:my”]

为了适应这种情况,我使用了使用XPATH的元素查询
//textarea[1]
,因为Recipients部分总是第一个
textarea
。事实证明,这在不同的浏览器会话中可以很好地一致工作

代码片段

>>> d = webdriver.Chrome()
[14424:7728:0809/135301.805:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2

DevTools listening on ws://127.0.0.1:12582/devtools/browser/31a5ab42-a4d2-46f3-95c6-a0c9ddc129d7
>>> d.get('https://www.gmail.com')
>>> d.find_element_by_xpath(xpath)
<selenium.webdriver.remote.webelement.WebElement (session="6072286733856e53b69af89ea981001c", element="0.42218760484088036-1")>
>>> d.find_element_by_xpath('//textarea[1]').send_keys('cswadhikar@gmail.com')
>d=webdriver.Chrome()
[14424:7728:0809/135301.805:错误:install_util.cc(597)]无法读取注册表值HKLM\SOFTWARE\Policys\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken以写入结果=2
开发工具在ws://127.0.0.1:12582/DevTools/browser/31a5ab42-a4d2-46f3-95c6-a0c9ddc129d7上侦听
>>>得https://www.gmail.com')
>>>d.通过xpath(xpath)查找元素
>>>d.通过xpath('//textarea[1]')查找元素cswadhikar@gmail.com')
结果

>>> d = webdriver.Chrome()
[14424:7728:0809/135301.805:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2

DevTools listening on ws://127.0.0.1:12582/devtools/browser/31a5ab42-a4d2-46f3-95c6-a0c9ddc129d7
>>> d.get('https://www.gmail.com')
>>> d.find_element_by_xpath(xpath)
<selenium.webdriver.remote.webelement.WebElement (session="6072286733856e53b69af89ea981001c", element="0.42218760484088036-1")>
>>> d.find_element_by_xpath('//textarea[1]').send_keys('cswadhikar@gmail.com')

尝试使用此代码发送带有Gmail的电子邮件。 它必须具有、主题和发送按钮功能:

driver.find_元素(By.XPATH,'/*[@id=“:k2”]/div/div')。单击() 时间。睡眠(5)

driver.find_元素(By.NAME,'to')。发送_键(“输入收件人的电子邮件地址”)#到compose中的字段 时间。睡眠(2)

driver.find_元素(By.NAME,'subjectbox').send_键(“此电子邮件是使用selenium发送的”)#compose中的Subject字段 时间。睡眠(2)

driver.find_元素(By.XPATH,'/*[@id=“:p3”]')。单击()#单击发送按钮

时间。睡眠(5)


driver.close()

尝试使用此代码发送带有Gmail的电子邮件。 它必须具有、主题和发送按钮功能:

driver.find_元素(By.XPATH,'/*[@id=“:k2”]/div/div')。单击() 时间。睡眠(5)

driver.find_元素(By.NAME,'to')。发送_键(“输入收件人的电子邮件地址”)#到compose中的字段 时间。睡眠(2)

driver.find_元素(By.NAME,'subjectbox').send_键(“此电子邮件是使用selenium发送的”)#compose中的Subject字段 时间。睡眠(2)

driver.find_元素(By.XPATH,'/*[@id=“:p3”]')。单击()#单击发送按钮

时间。睡眠(5)


driver.close()

这听起来像是XY问题。当您试图解决的问题是关于设置Web服务器的IP时,为什么您会问自己发送电子邮件?您好,这似乎是一个xpath或元素不可访问的问题。你能添加gmail登录的屏幕打印吗?我将尝试获取xpathJust注意到,在不同浏览器中编写消息时,“To:”文本区域元素的id会动态变化。这听起来像是XY问题。当您试图解决的问题是关于设置Web服务器的IP时,为什么您会问自己发送电子邮件?您好,这似乎是一个xpath或元素不可访问的问题。你能添加gmail登录的屏幕打印吗?我将尝试获取xpathJust注意到“To:”文本区域元素的id在不同浏览器中撰写消息时会动态更改
等待。直到(EC.element_To_可点击((By.XPATH,//textarea[1]')。发送密钥(“my_email”)
为我完成了任务
等待。直到(EC.element_To_To_可点击((By.XPATH,//textarea[1]'))。发送密钥(“我的电子邮件”)
帮我完成了任务