我一直在尋找如何使用PhantomJS自動化網頁上的操作,但是我有問題操縱頁面來做我想做的事。我正在使用this as test site。我已經設法讓Phantom打開網頁,並從#result範圍中刪除隨機句子。但是現在我想要做的是在不重新啓動腳本的情況下獲得另一個句子。我不想關閉並重新打開頁面,因爲Phantom需要很長時間才能啓動webkit並加載頁面。所以我想我可以通過讓Phantom點擊句子框下方的「刷新」按鈕來獲得另一個句子。這是我目前所面對的:點擊一個鏈接不刷新內容
var page = require('webpage').create();
console.log("connecting...");
page.open("http://watchout4snakes.com/wo4snakes/Random/RandomSentence", function(){
console.log('connected');
var content = page.content;
var phrase = page.evaluate(function() {
return document.getElementById("result").innerHTML;
});
console.log(phrase);
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
$("frmSentence").click();
});
});
var content = page.content;
var phrase = page.evaluate(function() {
return document.getElementById("result").innerHTML;
});
console.log(phrase);
phantom.exit();
});
正如你可以看到我試圖通過使用.click()
功能,單擊刷新按鈕,但是這不是我的工作,因爲我仍然得到句子相同預先。鑑於該按鈕的HTML:
<form action="/wo4snakes/Random/NewRandomSentence" id="frmSentence" method="post" novalidate="novalidate">
<p><input type="submit" value="Refresh"></p>
</form>
我不知道我應該在腳本中引用什麼被點擊?我正在嘗試表單ID'frmSentence',但這不起作用。我想知道如果.click()
是正確的方式去做這件事,有沒有什麼方法幻影提交按鈕鏈接到的形式?或者,也許我可以在獲取該句子的頁面上運行關聯的腳本?我有點迷失在這一個,所以我不知道我應該去哪個方法?
感謝您的回答。我使用'page.open'的最初問題是需要很長的時間來連接和獲取數據,我希望能夠相對無縫地獲得一個新句子。如果只是將POST發送到給定的地址,那麼在頁面仍然打開的情況下,是否可以使用Phantom自動執行此操作?或者正在發送'page.open'命令的POST部分? – kmahon99 2014-09-26 11:56:38
如果你打開'NewRandomSentence',你可以嘗試'page.reload()'。但是你可能需要測試可靠性。我每次用3個迷你步驟搜索100K +數據(搜索,到詳細頁面,下載報告),並且PhantomJS經常碰撞5次請求。更改後爲每個請求做page.open它稍微更可靠,每次崩潰100個請求左右。也許這只是爲了https而不是http我不確定。 – wayne 2014-09-26 12:24:11