PhantomJS:无法获得Element

时间:2017-06-28 18:15:20

标签: javascript phantomjs

我有一个基于此的PhantomJS脚本:http://code-epicenter.com/how-to-login-amazon-using-phantomjs-working-example/

它运作良好,例如,我可以填充登录页面并点击"提交"代码如下所示的按钮:

function(){
    console.log('Step 3');
    page.evaluate(function() {
        document.getElementById("username-pulldown").value="username";
        document.getElementById("password-pulldown").value="password";
        document.getElementById("login-pulldown"   ).click();
    });
},

稍后,我尝试执行此操作:

function(){
    console.log('Step 7');
    page.evaluate(function(){
        document.getElementById("content_text").value += "SomeTextIWannaAdd";
        //console.log(document.documentElement.innerHTML);
        document.getElementByName("button");
    });
},

我收到此错误消息:

Step 7
ERROR: TypeError: undefined is not a function (evaluating
'document.getElementByName("button")')
TRACE:
 -> undefined: 3
 -> : 8

  phantomjs://code/EditWiki.js:48 in onError

我希望得到的html元素如下:

<button name="button" type="submit" class="button -highlight -with-icon icon-checkmark">Save</button>

innerHTML的其余部分:https://pastebin.com/j5cCDxEU

2 个答案:

答案 0 :(得分:0)

按名称获取元素非常容易出错,因为可能有多个“按钮”尝试通过xpath或id / class name选择元素。

答案 1 :(得分:0)

document对象没有getElementByName方法,只有getElementsByName方法(复数)。

使用querySelector代替按属性名称查询:

document.querySelector('[name="button"]')

要查询所有button代码,您可以使用getElementsByTagName

document.getElementsByTagName('button')

要查询具有班级名称的所有按钮,请使用getElementsByClassName

document.getElementsByClassName('.button')

要发出点击事件,您可以执行以下操作:

document.querySelector('[name="button"]').click()

如果使用返回数组的选择器,例如getElementsByTagNamegetElementsByClassName,那么您可以抓住第一个,然后点击:

document.getElementsByClassName('.button')[0].click()