CasperJS - 在网站上注册并验证 Gmail 上发送的邮件 - 对于 slimer 和 phantom -

2024-05-05

Edit :这是windows的行为,linux就失败了。

首先,如果您使用 casper 成功导航 gmail(没有随机等待时间 - 从 20 秒到 5 分钟 -),请告诉我。

我想在我们的网站上注册,然后使用 Gmail 自动验证我的注册(整个注册步骤)。以前有人这样做过吗?

我注册没有问题,并且可以登录我的邮箱(Gmail),但是在导航和验证 Gmail 中的注册时遇到一些麻烦后,我观察到 phantomJS 和 slimerJS 之间的不同行为。

在幻影中,它可以工作(无需特殊命令),但可能需要 5 分钟才能进入下一步(waitForSelector)。而使用 slimerjs,它只会停留在邮箱页面上。

EDIT : 一件奇怪的事情:如果我手动单击(更细)打开弹出窗口的链接,它就会停止被阻止并且我的导航继续,就像它无法检测到步骤本身的结束并且无法在之后执行 waitFor提交点击而无需其他交互。是刷新/重新加载问题吗?

尝试看看你自己:

casper.thenOpen('https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/&hl=en', function(){
    this.sendKeys("input#Email","your mail");
    this.sendKeys("input#Passwd","your password");
    this.click("input#signIn.rc-button-submit");
    console.log(this.getCurrentUrl());
    this.waitForSelector(".aeF",function(){//fail with linux -> timeout
        this.test.pass("ok"); //windows -> stuck in slimer, several times in phantom
        this.test.assertExists(".T-I.J-J5-Ji.T-I-KE.L3","Gmail Home ok");
        console.log("url "+this.getCurrentUrl());
    });

我没有收到任何超时错误。在 slimerjs 中,它只是保持页面打开。

如果我执行 waitForPopup 而不是 waitForUrl,则会出现错误(超时 -> 未弹出),那么为什么 waitForUrl/waitForSelector... 会卡住?我也尝试了 --web-security=no,--ignore-ssl-errors=true 命令(未链接,但我也尝试了 --output-encoding=ISO 8859-1 ,但不起作用)。

这里是 phantom 和 slimer 之间的区别(doc):http://docs.slimerjs.org/0.8/differences-with-phantomjs.html http://docs.slimerjs.org/0.8/differences-with-phantomjs.html(我认为在这个问题上没用)


好吧,我们终于找到了一种方法:问题是默认情况下 gmail 循环处理 ajax 请求,检查一些新邮件等...参见页面轮询远程 url https://groups.google.com/forum/#!topic/casperjs/D7KYWJeIprk,导致 casper 同步阻塞。

Fortunately google proposes a way to avoid that, using the simplified HTML version (you can for example use a special gmail address for your tests using this version) : casperJs+gmail

这样脚本就可以正常工作。

Bonus :

/*
 * Click on an element specified by its selector and a part of its text content.
 * This method resolves some problem as random space in textNode / more flexible too.
 * Need to fix one bug though : when there is a tag in textContent of our selector.
 */
casper.clickSelectorHasText = function (selector, containsText){
    var tmp = this.getElementsInfo(selector)
        ,i
        ,l
        ,bool=false
        ;
    for (i=0,l=tmp.length;i<l; i++){
        if(tmp[i].text && tmp[i].text.indexOf(containsText)!==-1){
            this.clickLabel(tmp[i].text);
            bool=true;
            break;
        }
    }
    casper.test.assert(bool, "clickSelectorHasText done, text and selector found -> click selector " + selector +" which contains text " + containsText);
};

casper.thenOpen('https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/&hl=en', function scrapeCode(){
        //log in
        this.sendKeys("input#Email","your email");
        this.sendKeys("input#Passwd","your password");
        this.click("input#signIn.rc-button-submit");
        //wait to redirect to our mailbox
        this.waitForSelector("form[name='f']",function(){
            //check main block
            this.test.assertExists("form[name='f']","Gmail Home ok");
            this.test.assertSelectorHasText("span", "Your gmail title message");
            this.clickSelectorHasText("font", "one string which appears in font tag");
            //wait inscription message appears
            this.waitForSelector("div.msg",function(){
                this.test.assertSelectorHasText("a","the message which activates your account--> in <a>");
            });
        })
        //validate our account
        .then(function(){
            this.clickLabel("the message which activates your account--> in <a>");
            this.waitForPopup(/mail/, function(){
                this.test.pass("popup opened");
            });
            this.withPopup(/mail/, function(){
                this.viewport(1400,800);
                this.test.pass("With Popup");
                //wait something on your website (for me selector .boxValid)
                this.waitForSelector(".boxValid", function(){
                    /*
                     * Here your code after validation
                     */
                });

            });
        })

可能可以使用事件来使用普通的 Gmail 来完成此操作,请参阅资源已收到.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CasperJS - 在网站上注册并验证 Gmail 上发送的邮件 - 对于 slimer 和 phantom - 的相关文章

随机推荐

  • okhttp3 上的流意外结束

    我已经遵循了这个link https stackoverflow com questions 35238894 android retrofit 2 authenticator result刷新访问令牌 将 Authenticator 添加
  • 使用 PHP simpleXML 查找一个我知道名称但不知道其所在位置的节点

    如果我知道要查找的节点的名称 但我可能不一定知道该节点的路径 我需要在 PHP 中查询 XML 字符串 我想我可以使用 xpath 做到这一点 但我无法弄清楚如何设置相对路径来查看文档中的任何位置 有人可以指出我正确的方向吗 我目前正在尝试
  • 如何使用 file_put_contents() 写入变量值?

    一整天都在试图解决这个问题 假设这只是一个小错误 我正在尝试使用file put content将变量值放入另一个 php 文件中 下面的代码将解释 将数据写入php的文件
  • 有人可以提供 AngularJS 中范围的 $destroy 事件的示例吗?

    有人可以提供作用域 destroy 事件的示例吗 这是来自的参考文档http docs angularjs org api ng ro otScope Scope destroy http docs angularjs org api ng
  • Vagrant 提供,无法启动 grunt

    我正在尝试让 vagrant 安装 nodejs 正常运行所需的所有内容 然后在节点项目的根文件夹上执行 nohup grunt server 之后 我期望服务器在端口 3030 上侦听 但事实并非如此 如果在配置后我这样做 流浪者 ssh
  • 如何将跨源资源共享与 Spring MVC 4.0.0 RESTful Webservice 集成

    我有一个简单的 Web 服务返回JSON data The 用户等级 com bargadss SpringService Domain 是个POJO类包含 用户 ID 名字 姓氏 电子邮件 The 用户服务类 com bargadss S
  • 应用程序在 JSON jparser 发出 http 请求时崩溃

    您好 我使用本教程连接到网络或本地的 mySQL 数据库 here http www androidhive info 2012 05 how to connect android with php mysql 虽然所有服务器端 php 文
  • Doxygen:显示未记录方法的警告

    我已经用 doxygen 激活了警告 WARNINGS YES WARN IF UNDOCUMENTED YES WARN IF DOC ERROR YES WARN NO PARAMDOC YES 但未记录的方法如下 void Anima
  • Selenium 2:中断页面加载

    我在使用 FirefoxDriver 使用 Selenium 2 0b3 Java API 单击按钮时遇到问题 单击该按钮会将表单发送到网络服务器 然后浏览器会因表单提交而进入新页面 当使用 element click 单击某个元素时 se
  • UIImagePickerController 和 iCloud 照片

    切换到 iCloud Photo 后 似乎 UIImagePickerController 返回的一些图像非常模糊 看起来该图像是从 iCloud 照片中获取的 我是否能够检索原始图像 或过滤掉 iCloud 照片图像 或者我是否必须切换到
  • scikit-learn - 具有置信区间的 ROC 曲线

    我可以使用 ROC 曲线scikit learn with fpr tpr thresholds metrics roc curve y true y pred pos label 1 where y true是基于我的黄金标准的值列表 即
  • Apache POI - JAVA - 迭代 Excel 中的列

    这里是java新手 我正在编写一个代码 该代码读取 Excel 文件 查看列中的单元格 然后编写如下表所示的内容 我有一个 Excel 文件 如下所示 col1 col2 col3 col4 row1 2 3 1 1 w row2 3 2
  • 流浪家园慢

    我有一个基于 Laravel Homestead 的 vagrant 服务器 用于在本地测试我的 Laravel 站点 大部分情况下它运行得很好 然而 最近 我遇到了问题 它会停止几分钟 典型 到几个小时 罕见 这种情况每 15 分钟左右就
  • jQuery 使用“data” HTML 属性创建一个新元素

    Preamble 问题是关于使用 HTML 创建 HTML 元素data属性 比如 问题 几分钟前我偶然发现了这个问题 这是一个快速问题 如果我写 div id foo class bar div class bar div However
  • AngularDart 中的 somecomponent.template.dart 导入指向什么?

    我正在阅读 AngularDart路由教程 https webdev dartlang org angular guide router 1 libsrcroutesdart并发现了这个代码片段 import package angular
  • 为什么powershell会收集未捕获的值并将其作为数组返回

    尽管我认为以下代码应该返回单个值 但它返回一个数组 function Do Something 123 return 456 Do Something GetType will say Object 我了解到 如果我想避免这种情况 我必须将
  • 这个洗牌算法有什么问题吗?

    我一直在做一些休闲假期计算 我的迷你项目是模拟意大利游戏 tomboli 一个关键的组成部分是对以下过程的模拟 游戏由一名男子控制 他拿着一袋 90 个弹珠 编号为 1 到 90 他从袋中随机取出一颗弹珠 每次向玩家喊出弹珠编号 经过一番思
  • D3js 多折线图 mouseOver

    我正在努力适应this http bl ocks org mbostock 3902569D3js 折线图示例 将鼠标悬停在我的多线图表上的使用情况 看起来d3 mouse this 0 on the mousemove函数生成以下错误 无
  • Android NDK __android_log_print函数和LogCat

    我有一个类似的功能 android log print ANDROID LOG INFO HelloNDK 在我的 C 代码上 我在 LogCat 上找不到该输出 我需要设置什么样的过滤器 按日志标签 按日志消息 按应用程序名称 按日志级别
  • CasperJS - 在网站上注册并验证 Gmail 上发送的邮件 - 对于 slimer 和 phantom -

    Edit 这是windows的行为 linux就失败了 首先 如果您使用 casper 成功导航 gmail 没有随机等待时间 从 20 秒到 5 分钟 请告诉我 我想在我们的网站上注册 然后使用 Gmail 自动验证我的注册 整个注册步骤