我有一个基于此的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
答案 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()
如果使用返回数组的选择器,例如getElementsByTagName
或getElementsByClassName
,那么您可以抓住第一个,然后点击:
document.getElementsByClassName('.button')[0].click()