开发者问题收集

如何点击一个简单的链接?

2015-08-25
3319

我使用 PhantomJS 登录了网页。一切正常。我打印了页面并知道我已登录。现在我想点击一个名为“Analysis”的链接和以下 html 代码。

 <div class="navbar-subnav" data-id="Dashboard">
  <ul class="tab-list nav navbar-nav">

            <li class='active'><a href="/"><i class='icon-chart-pie'></i> Dashboard</a></li>

            <li><a href="/index/analyses"><i class='icon-search'></i> Analysis</a></li>

            <li><a href="/date_time/set_date_time"><i class='icon-cog'></i> Settings</a></li>

            <li><a href="/report/report" onclick="setTimeout(showLoading, 50);"><i class='icon-chart-area'></i> Reports</a></li>

            <li><a href="/manual/csc"><i class='icon-info-circled'></i> About</a></li>


</ul>

通常我使用

document.getElementById("logInButton").click();

“点击”元素,但在这种情况下没有 ID。 那么当我当前在 /index 中时,如何导航到 /index/analysis?

由于我必须登录,所以我必须使用相同的会话,因此简单的 page.open 命令不起作用。

我试过了

 function(){

console.log(document.querySelector('[href="/index/analyses"]'));
    document.querySelector('[href="/index/analyses"]').click();
},

但日志总是显示

null
'TypeError: 'null' is not an object (evaluating 'document.querySelector('[href="/index/analyses"]').click')

ama.js:52
ama.js:76 in executeRequestsStepByStep

并用它发送垃圾邮件。

3个回答

如果您的页面上只有一个 <li> 元素,其类名为 ' active ',那么您可以这样写:

document.getElementsByClassName('active')[0].children[0].click();

如果您的某个 <ul id="elementID"> 元素内有更多 <li class="active"> 元素,那么您可以这样写:

var ul = document.getElementsById('elementID');
var li = ul.children[0];//Here 0 is index of the first child, but if you want second element you can put 1 etc.
var a = li.children[0];//Here is your <a> element 
a.click();

更新

这应该可行:

document.getElementsByClassName("tab-list")[0].children[1].children[0].click()
MrD
2015-08-25

您可以通过其 href 属性值获取元素:

document.querySelector('[href*="/index/analyses"]')

然后,您可以触发点击事件或任何您想要的操作:)

从 IE8 开始支持 querySelector( MDN )。

JSFiddle

Jeff Noel
2015-08-25

用一个简单的

function(){         
        page.open('https://localhost/index/analyses',function(status){
    });    
},
Helyx
2015-08-25