CasperJS:如何填写as​​p表单

时间:2015-01-29 06:38:56

标签: javascript asp.net xpath phantomjs casperjs

我正在尝试通过casperjs自动执行asp编写的网站的几个步骤。我想要实现以下目标。

  1. 导航至登录页面
  2. 填写用户名和密码字段
  3. 点击登录按钮
  4. 捕获成功页面的屏幕截图
  5. 但到目前为止,我只能完成这一过程的第一步。源视图页面对我来说看起来很少。大多数节点都以<ui:>标记开头,我不知道它。

    <?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" href="theme/xslt/all.xsl?build=2.0.012&amp;theme=theme_immi" ?> 
    <!DOCTYPE html [ <!ENTITY nbsp "&#160;"> ]> 
    <ui:root title="ImmiAccount - Login" xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:ui="http://www.immi.gov.au/Namespace/UI/V1.0"> 
    

    我首先尝试使用fillSelectors()方法提交表单。

    casper.start('https://online.immi.gov.au/lusc/login',function() {
        this.echo(this.getTitle());
    
        this.fillSelectors('#app_L2',{
            'input[id="app_L2b0a0a0a3a1a"]':  'john',
            'input[id="app_L2b0a0a0a3b1a"]':  'john123'
        });
    
        this.wait('2000',function(){
            this.capture('formfill.png');
        });    
    });
    
    casper.then(function() {
        // Click on 1st result link
        this.click('#app_L2b0a0a0a4a');
        this.wait('5000',function(){
            this.capture('success.png');
        })
    });
    

    出现以下错误

    CasperError: Errors encountered while filling form: no field matching css selector "input[id="app_L2b0a0a0a3a1a"]" in form; 
    no field matching css selector "input[id="app_L2b0a0a0a3b1a"]" in form
    

    然后尝试使用fillXPath()

    casper.start('https://online.immi.gov.au/lusc/login',function() {
        this.echo(this.getTitle());
    
        this.fillXPath('#app_L2',{
            '//*[@id="app_L2b0a0a0a3a1a"]':    'john',
            '//*[@id="app_L2b0a0a0a3b1a"]':  'john123'
        });
    
        this.wait('2000',function(){
            this.capture('formfill.png');
        });    
    });
    
    casper.then(function() {
        // Click on 1st result link
        this.click(x('//*[@id="app_L2b0a0a0a4a"]'),
        this.wait('5000',function(){
            this.capture('success.png');
        }));
    });
    

    发生错误

    CasperError: Errors encountered while filling form: Unable to find field element in form: FieldNotFound: Invalid field type; only HTMLElement and NodeList are supported; Unable to find field element in form: FieldNotFound: Invalid field type; only HTMLElement and NodeList are supported
    

    最后,我尝试使用sendkeys()方法填充字段,然后click()按下登录按钮。再次,没有找到成功。这里的代码是

    this.sendKeys('#app_L2b0a0a0a3a1a', 'john');
    this.sendKeys('#app_L2b0a0a0a3b1a', 'john123');
    this.click(x('//*[@id="app_L2b0a0a0a4a"]'),
      this.wait('5000',function(){
        this.capture('ctrlqpass.png');
      })
    );
    

    以上代码既不会触发错误也不会触发成功页面。在所有情况下,casper都会捕获初始页面的屏幕截图。任何帮助非常感谢..谢谢

1 个答案:

答案 0 :(得分:2)

该页面是一个带有附加样式表(XSL)的XML文档,用于将页面转换为HTML或XHTML。这是由大多数浏览器自动完成的。

似乎PhantomJS默认编译,禁用XSLT处理。因此,不处理样式表,PhantomJS将此视为任意数据。

您可以使用所需的选项集编译PhantomJS,也可以使用SlimerJS作为CasperJS的引擎。使用的gecko引擎默认支持XSLT转换。

另一种途径可能是使用JavaScript中包含的XSLTProcessor来自己转换内容,但PhantomJS中也没有。