簡體   English   中英

PhantomJS不使用select標簽操作下拉菜單

[英]PhantomJS doesn't manipulate dropdown with select tag

我嘗試運行的一些phantomjs代碼遇到了麻煩。 從理論上講,該代碼應該能夠從下面的下拉菜單中選擇一個選項。

 <select name="Budget_Ctr2" size="1" onchange="JavaScript:Submitthis('Budget_Ctr2')" id="Budget_Ctr2"> <option selected="selected" value="CAAH">CAAH</option> <option value="CAFLS">CAFLS</option> <option value="CECAS">CECAS</option> 

所有代碼均有效,但當我進入以下代碼段時除外:

 var sel = document.getElementById('Budget_Ctr2'); var opts = sel.options; 

到目前為止,我在堆棧上閱讀的所有內容都使我認為這應該可行。 但是,當我運行該程序時,出現“ TypeError:null不是一個對象(正在評估'sel.options')。根據一些測試,我很確信'sel'本身也不為null,但是我可以”不能將錯誤與正在發生的事情協調起來。在phantomjs之外對JavaScript沒有超級的經驗,但是有人有什么想法嗎?

為什么null不是對象? 運行PhantomJS腳本時,它在DOM中不存在。

但是為什么這個元素在非無頭瀏覽器的開發工具中可見? 它可能是通過腳本的工作以編程方式添加的。

請記住:如果在page.open回調觸發后立即運行page.evaluate ,則它運行得非常快-頁面腳本可能尚未完成其工作。 因此,您可以等待大約一個時間,然后像這樣進行page.evaluate

var seconds = 3;
page.open(function(){

    setTimeout(function(){

        page.evaluate(){
            // do stuff
        }

    }, 1000 * seconds);

});

或者,您可以等待目標元素出現,請參見waitfor.js

您的腳本似乎位於head 如果是這樣,則在加載body元素之前執行它。 嘗試運行console.log(document.body); 命令,它將返回null

您需要將代碼包裝在window.onload處理程序中,或將其包含在jQuery的$(document).ready()內,或將其放在</body>標記之前。

請查看此答案以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM