【问题标题】:Email automation using Selenium Webdriver使用 Selenium Webdriver 的电子邮件自动化
【发布时间】:2016-03-31 05:47:46
【问题描述】:

如何使用 Selenium 从特定邮件程序中选择最新的未读邮件。 class/id 标识符是特定于特定邮件的,因此会导致硬编码以使用这些标识符。

【问题讨论】:

  • 请在提问时更加具体。如果您正在寻找 gmail 最新未读邮件作为示例,那么它很好,但如果您正在寻找在您的组织中使用的特定邮件,那么它很难任何人都可以解释。所以请解释你到底想要什么
  • 我正在寻找来自特定邮件程序的最新未读邮件。假设我正在查找来自 XYZ 的邮件以及 XYZ 发送到我的 gmail 帐户的最新邮件。
  • 是的,现在这是具体的,可以完成等待一段时间,我将发布一个关于希望对您有所帮助的示例

标签: selenium selenium-webdriver automation gmail


【解决方案1】:

您好,请为您的问题找到解决方案,这与您最近的评论完全一致

public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.setProperty("webdriver.chrome.driver","D:\\eclipseProject\\StackOverFlow\\chromedriver_win32 (1)\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.manage().window().maximize();

    driver.get("https://accounts.google.com/ServiceLogin?");

    // gmail login
    driver.findElement(By.id("Email")).sendKeys("your gmail username");
    driver.findElement(By.id("next")).click();
    driver.findElement(By.id("Passwd")).sendKeys("your gmail password");
    driver.findElement(By.id("signIn")).click();

    // some optional actions for reaching gmail inbox
    driver.findElement(By.xpath("//*[@title='Google apps']")).click();
    driver.findElement(By.id("gb23")).click();

    // now talking un-read email form inbox into a list
    List<WebElement> unreademeil = driver.findElements(By.xpath("//*[@class='zF']"));

    // Mailer name for which i want to check do i have an email in my inbox 
    String MyMailer = "Udacity";

    // real logic starts here
    for(int i=0;i<unreademeil.size();i++){
        if(unreademeil.get(i).isDisplayed()==true){
            // now verify if you have got mail form a specific mailer (Note Un-read mails)
            // for read mails xpath loactor will change but logic will remain same
            if(unreademeil.get(i).getText().equals(MyMailer)){
                System.out.println("Yes we have got mail form " + MyMailer);
                // also you can perform more actions here 
                // like if you want to open email form the mailer
                break;
            }else{
                System.out.println("No mail form " + MyMailer);
            }
        }
    }
}

在eclipse中控制台显示的结果是

Yes we have got mail form Udacity

希望这对您正在寻找的内容有所帮助

【讨论】:

  • 这很有帮助!.. 谢谢.. 需要更多.. 如何打开未读邮件?每当有新电子邮件时,xpath/class/id 都会改变。
  • 在 gmail 中没有未读邮件的 xpath 将是一,对于未读邮件,xpath 将是一,正如你所看到的未读我使用了单个 xpath,它表示收件箱中的所有未读邮件,如果你想要单个 xpath对于未读,请将 xptah 更新为此 By.xpath("//*[@class='yP']") 如果它对您有帮助,请将此标记为您的答案,谢谢
【解决方案2】:

除了反对票之外:没有通用的方法可以做到这一点。这完全取决于您的 Web-Mailer。通常未读邮件附有一些特殊的类。所以我在这种情况下所做的是寻找它们,构建一个 XPath(可以在 chrome 开发工具搜索文本字段中轻松测试,或者使用 Chrome 扩展“XPath Helper”),然后单击 tem 并删除它们一个接一个,或者 - 如果存在 - 在同一行中选择一个复选框。 XPath 表达式往往相对较大,但也足够灵活。

最大的问题是,Web-Mailer 经常会发生变化,因此您需要保持跟踪。这可能令人不安。

【讨论】:

    【解决方案3】:

    我不建议使用 JAVAX MAIL API 更好地通过 GUI 选项。我有类似的问题,排序。因此,使用下面的 JAVAX MAIL API 和 Java 代码:

      public GmailUtils(String username, String password, String server, 
      EmailFolder 
        emailFolder) throws Exception {
        Properties props = System.getProperties();
        props.setProperty("mail.store.protocol", "imap");
        props.setProperty("mail.imaps.partialfetch", "false");
        props.put("mail.imap.ssl.enable", "true");
        props.put("mail.mime.base64.ignoreerrors", "true");
    
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("imap");
        store.connect("imap.gmail.com", 993, "<your email>", "<your password>");
    
        Folder folder = store.getFolder(emailFolder.getText());
        folder.open(Folder.READ_WRITE);
    
        System.out.println("Total Messages:" + folder.getMessageCount());
        System.out.println("Unread Messages:" + folder.getUnreadMessageCount());
    
        messages = folder.getMessages();
    
        for (Message mail : messages) {
            if (!mail.isSet(Flags.Flag.SEEN) &&  mail.getFrom()[0]= <emailer address>)
     // unread email and from the specific sender
     {          System.out.println("**********************************");
                System.out.println("MESSAGE : \n");
    
                System.out.println("Subject: " + mail.getSubject());
                System.out.println("From: " + mail.getFrom()[0]);
                System.out.println("To: " + mail.getAllRecipients()[0]);
                System.out.println("Date: " + mail.getReceivedDate());
                System.out.println("Size: " + mail.getSize());
                System.out.println("Flags: " + mail.getFlags());
                System.out.println("ContentType: " + mail.getContentType());                
                System.out.println("Body: \n" + getEmailBody(mail));
                System.out.println("Has Attachments: " + hasAttachments(mail));
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多