Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中使用zombie填充登录表单_Javascript_Node.js_Zombie.js - Fatal编程技术网

Javascript 在node.js中使用zombie填充登录表单

Javascript 在node.js中使用zombie填充登录表单,javascript,node.js,zombie.js,Javascript,Node.js,Zombie.js,晚上好!我正在尝试使用zombie.js登录一个网站,但我似乎无法让它正常工作。 哦,这个网站是芬兰语的,但不难理解,有两个文本字段和一个按钮。第一个是用户名,第二个是密码,按钮是登录按钮 目前我的登录代码如下: var Browser = require("zombie"); browser = new Browser(); browser.visit("https://www.nordnet.fi/mux/login/startFI.html?cmpi=start-loggain",

晚上好!我正在尝试使用zombie.js登录一个网站,但我似乎无法让它正常工作。 哦,这个网站是芬兰语的,但不难理解,有两个文本字段和一个按钮。第一个是用户名,第二个是密码,按钮是登录按钮

目前我的登录代码如下:

var Browser = require("zombie");
browser = new Browser();
browser.visit("https://www.nordnet.fi/mux/login/startFI.html?cmpi=start-loggain",
    function () {
        // Here I check the title of the page I'm on.
        console.log(browser.text("title"));
        // Here I fill the needed information.
        browser.document.getElementById("input1").value ="MYUSERNAME";
        browser.document.getElementById("pContent").value ="MYPASSWORD";
        // And here it fails. I try to submit the form in question.
        browser.document.getElementById("loginForm").submit();
        setTimeout(function () {
            // This is here to check that we've submitted the info and have been
            // redirected to a new website.
            console.log(browser.text("title"));
        }, 2000);
});
现在我知道我可能应该使用僵尸自己的“填充”方法,但我尝试了,但没有运气,所以我尝试了一些新的东西

我从中得到的只是一个错误:

Y:\IMC\Development\Web\node_modules\zombie\lib\zombie\forms.js:72
  return history._submit(_this.getAttribute("action"), _this.getAttribute(
                 ^
TypeError: Cannot call method '_submit' of undefined
throw new Error("No BUTTON '" + selector + "'");
        ^
Error: No BUTTON 'Kirjaudu sisään'
现在,如果我记录下
browser.document.getElementById(“loginForm”)
,它显然找到了表单,但遗憾的是,出于某种原因,它不喜欢它

我还尝试了僵尸的“传统”方法,即使用网页上的登录按钮并按下它。问题是,它实际上不是一个按钮,只是一个带有链接的图像,而且都在
中。我不知道如何“点击”那个按钮

它上面没有ID,所以我无法使用它,然后我尝试使用它上面的文本,但是因为它上面有umlauts,所以我无法让它工作。使用/344转义ä只会给出一个错误:

Y:\IMC\Development\Web\node_modules\zombie\lib\zombie\forms.js:72
  return history._submit(_this.getAttribute("action"), _this.getAttribute(
                 ^
TypeError: Cannot call method '_submit' of undefined
throw new Error("No BUTTON '" + selector + "'");
        ^
Error: No BUTTON 'Kirjaudu sisään'
所以是的,这不起作用,尽管我不知道为什么它不能正确识别逃逸的乌姆劳特

这是我的第一个问题,第二个是一个小问题,但我想既然我已经写了这篇文章,为什么不在这里问它呢


如果我能让所有这些都工作起来,我能复制这个登录给我的cookie,并在我的YQL中使用它来抓取屏幕吗?基本上,我正在尝试刮股票市场的价值,但没有登录的价值是15分钟延迟,这不是太坏,但我希望它是生活无论如何。

经过两次测试使用僵尸我得出结论,它仍然是早期使用它进行认真的测试。尽管如此,我还是提出了表单提交的工作示例(使用常规的
.submit()
方法)

如您所见,提示是使用construct
browser.wait()。然后(…)
提交表单后,否则
browser
对象仍将引用初始页面(作为参数传递给
visit
方法的页面)。注意:history对象将包含您提交表单的页面地址,即使您不等待页面加载-这让我有点困惑,因为我确信我应该已经看到了新页面


编辑: 对于您的站点,僵尸似乎工作正常(我可能提交表单并收到“错误登录或密码”警报)。有一些JS错误,但zombie并不关心这些错误(您应该调试这些错误,看看脚本是否适合普通用户)。不管怎样,这是我使用的脚本:

var Browser = require("zombie");
var assert = require("assert");

browser = new Browser()
browser.visit("https://www.nordnet.fi/mux/login/startFI.html?cmpi=start-loggain", function () {
    // fill in login field
    browser.fill('#input1', 'zombie');
    // fill in password field
    browser.fill('#pContent', 'commingyourway');
    // submit the form
    browser.document.forms[0].submit();
    // wait for new page to be loaded then fire callback function
    browser.wait().then(function() {
        console.log('Form submitted ok!');
        // the resulting page will be displayed in your default browser
        browser.viewInBrowser();
    })
});

旁注:当我试图想出一个工作示例时,我尝试使用以下页面(由于不同的原因,所有页面都失败了):

  • google.com——尽管我用字符串填充了查询框并提交了表单,但我没有得到搜索结果。原因?谷歌可能采取了一些措施来防止自动工具(如僵尸)浏览搜索结果
  • bing.com-和谷歌一样-提交表单后,我没有得到搜索结果。原因?可能和谷歌一样
  • paulirish.com-在填写搜索查询框并提交表单后,zombie遇到脚本错误,无法完成页面(关于图表脚本中缺少ActiveX的内容)
  • perfectionkills.com-令人惊讶的是,我在这里遇到了与Paul Irish站点相同的问题-由于javascript错误,无法加载带有搜索结果的页面

结论:毕竟,强迫僵尸做你的工作并不是那么容易…:)

事实上,僵尸似乎相当不完整。由于jsdom向我射击的某种层次结构错误,我无法让这段代码正常工作,但我仍然不知道为什么我不能在我的页面上使用相同的技术?不管怎样,如果你的网页对公众开放的话,我会发一个链接到你的网页上,我会尝试用僵尸来漫游:)是的,我指的是你的代码。如果你感兴趣的话,这里有一个页面:虽然是芬兰语的,但是这个页面并不太复杂。用户名、密码和登录按钮:pNo担忧-谷歌翻译为救援;)今天晚些时候我会尝试将你的网站僵尸化。这里有可疑的事情发生。首先是browser.wait()。然后它似乎什么也不做,它只是从不记录“表单提交”部分,viewInBrowser()也不记录,尽管错误确实表明Windows不支持它。当我试图通过使用普通的setTimeout()来规避这个问题时,它似乎并没有改变站点。在这两种情况下(setTimeout()之前和之后),browser.text(“title”)都会给出相同的结果,如果它可以工作,那么后面的一个应该给出不同的答案。我会尝试再玩一些,但我不喜欢它的行为。看到了吗