2016-12-30 75 views
3

我是相當新的編碼,所以請原諒我,如果這是一個愚蠢的問題:硒的webdriver + PhantomJS + Python的 - 執行腳本和處理對話框

我想從一個列表獲取數據通過執行一個JavaScript稀少,這裏的相關HTML部分:

<a data-popover-ui="524151" data-popover-type="Search" href="javascript:LoadLists('SaveListSearchDetails.aspx?AutoLoad=1&amp;SavedListID=EID77FF7H&amp;SavedListTypeID=Search')" data-original-title="" title=""><span class="grid-result no-break">AVEV HRC FEC Master File</span></a> 

點擊這個超鏈接後,還有一個要求確認

這裏一個對話框,是我的嘗試:

browser = selenium.webdriver.PhantomJS(executable_path=r"E:\phantomjs-2.1.1-windows\bin\phantomjs.exe") 

browser.get('~~link where the javascript is~~') 

first_list = browser.execute_script("LoadLists('SaveListSearchDetails.aspx?AutoLoad=1&amp;SavedListID=EID77FF7H&amp;SavedListTypeID=Search')" 

browser.get('~~link where the list is~~') 

browser.get_screenshot_as_file 

browser.save_screenshot('1.jpg') 

截圖在那裏讓我看看它是否工作得很快。該列表未被更新。我幾乎沒有關於java編碼的線索,所以我不確定發生了什麼,但我認爲這是因爲當JavaScript執行時,我沒有處理顯示的對話框。

我想我可以使用get_element_by_SOMETHING,但我不確定要使用哪個,因爲該HTML部分中沒有ID,並且在處理該死的對話框時仍然需要幫助。

感謝yoooo


PhantomJS不能正常工作。作爲WebDriver切換到Chrome。

t_list = find_element_by_link_text("~~text~~") 
t_list.click() 
time.sleep(5) 
Alert(browser).accept() 

回答

0

以及你可能需要給一個延遲或後執行腳本,以便列表加載了(前提是它加載在正常的瀏覽器)。

+0

一個簡單的time.sleep()沒有工作,甚至等待5分鐘(比在瀏覽器中加載更多的方式)。另外,如果正確理解你的評論,當我在運行代碼後在瀏覽器中訪問它時,列表不會改變。 – AMC

+0

不確定關於java,但python有find_element_by_id,find_element_by_name,find_element_by_xpath等肯定java必須有類似的。你可以使用web inspector/firebug來查找id或xpath。 – Raaj

+0

我正在使用Python,並且我知道有find_element_by_,但我不知道在這種情況下使用哪一個。我不完全確定什麼是xpath和css選擇器,這可能是使用 – AMC