由于某种原因,querySelector和get element by class在存在的元素上返回null。

PhantomJS / SlimerJS

page.open('file:///Users/yeahsame/Desktop/index.html', function(status)
{
    console.log("Starting execution");
    document.querySelector("input")[0].value = "not working whatsoever";

    phantom.exit();
});


HTML:

<!doctype html>
<body>
    <input class="form-control email input-lg"></input>
    <button class="btn" onclick="location.href='notexist.html'">submit</button>
</body>


在slimerjs中运行,返回“ document.querySelector(...)为null”

最佳答案

PhantomJS / SlimerJS有两个上下文。只能通过沙盒page.evaluate()函数访问内部页面(DOM)上下文。它外面有一个document对象,但是它无权访问页面DOM。

page.open('file:///Users/yeahsame/Desktop/index.html', function(status)
{
    console.log("Starting execution");
    page.evaluate(function(selector, value){
        document.querySelector(selector)[0].value = value;
    }, "input", "not working whatsoever");

    page.render("screenshot.png");
    phantom.exit();
});


page.evaluate()内部的代码无法访问外部定义的变量,因此必须显式传递值。

关于javascript - PhantomJS/SlimerJS不能通过document.querySelector()查找元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32254021/

10-12 21:29