等到收到Gmail电子邮件

时间:2016-05-30 17:52:06

标签: python email selenium xpath

目前有一个gbox帐户,收件箱中没有电子邮件。我希望能够显示包含当前电子邮件数量的弹出窗口。如果没有电子邮件,则不会显示任何消息。

所以我选择使用Explicit Waits& Xpath做到这一点。根据我的理解,这允许我定义一个时间段(比如10秒),然后每500毫秒,代码将查询并检查元素是否包含正确的文本,按照下面函数的第二个参数指定

SELECT (DAYNAME(NOW()) = "monday", "ARE EQUAL", "ARE NOT EQUAL")

xpath位置是收件箱按钮的xpath。它的值会发生变化。 (如果您愿意,可以在自己的浏览器中验证这一点)

我实际上是第一次运行它(第一次运行它,我发布后,不要问为什么)并得到此错误代码:

wait = WebDriverWait(driver, 10)

wait.until(EC.element_to_be_present_in_element((By.XPATH, "//*[@id=':3s']/div/div[1]/span/a/"), 'Inbox (1)'))

AttributeError:'module'对象没有属性'element_to_be_present_in_element'

实施后:

Traceback (most recent call last):
  File "C:/Users/SG/Desktop/Report/Web_2.py", line 47, in <module>
   wait.until(EC.element_to_be_present_in_element((By.XPATH, "//*[@id=':3s']/div/div[1]/span/a/"), 'Inbox (1)'))

我在编译时仍然遇到此错误:

wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id=':3s']/div/div[1]/span/a[text()[contains(.,'Inbox (1)')]]")))

该页面有1封电子邮件,因此它应该有效,不知道为什么不是。

1 个答案:

答案 0 :(得分:1)

您应该使用:

import tkinter as tk
import math

class SampleApp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.canvas = tk.Canvas(width=400, height=400)
        self.canvas.pack(fill="both", expand=True)

    def _create_token(self, coord, color):
        '''Create a token at the given coordinate in the given color'''
        (x,y) = coord
        self.canvas.create_oval(x-5, y-5, x+5, y+5, 
                                outline=color, fill=color, tags="token")

    def create(self, xA, yA, xB, yB, d=10):
        self._create_token((xA, yA), "white")
        self._create_token((xB, yB), "pink")

        t = math.atan2(yB - yA, xB - xA)
        xC = (xA + xB)/2 + d * math.sin(t)
        yC = (yA + yB)/2 - d * math.cos(t)
        xD = (xA + xB)/2 - d * math.sin(t)
        yD = (yA + yB)/2 + d * math.cos(t)

        self.canvas.create_line((xA, yA), (xC, yC), (xB, yB), smooth=True)
        self.canvas.create_line((xA, yA), (xD, yD), (xB, yB), smooth=True, fill="red")

   if __name__ == "__main__":
        app = SampleApp()
        app.create(100, 100, 300, 250)
        app.mainloop()

在selenium-python doc中,没有方法wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id=':3s']/div/div[1]/span/a")) 来检查页面中是否有任何预期的元素,但是文档引用方法element_to_be_present_in_element

Doc:http://selenium-python.readthedocs.io/waits.html