2013-10-03 154 views
1

我想點擊一個鏈接來下載文件。我的Firefox首選項設置爲將文件保存到特定位置。但是,此特定鏈接提供了一個彈出窗口,我必須在下載之前接受。在我接受彈出窗口後,看起來我失去了我的首選項,並且正常情況下會下載文件(而不是指定的文件)。我怎樣才能避免失去我的偏好?如何在單擊JavaScript警報時保留我的Firefox首選項?

這裏是網站: http://gtlaw.com/People/Jeffrey-S-Kahn

我想打這個鏈接是這樣的:

 
<a href='javascript:vCard("../webportal/perform.v?obj=ve_oid:poid:Z1tOl9NPl44TqzcSkLMUwG3DtW3D&action=vCard")' style="font-weight: bold;">Download vCard</a> 

我使用的代碼是這個(修改,以使複製變得更容易一些):

url = "http://gtlaw.com/People/Jeffrey-S-Kahn" 

#set preferences 
fp = webdriver.FirefoxProfile() 
file_name = "C:\..........." 
fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting",False) 
fp.set_preference("browser.download.dir", file_name) 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/x-vcard") 
fp.set_preference("dom.max_chrome_script_run_time", 0) 
fp.set_preference("dom.max_script_run_time", 0) 
driver = webdriver.Firefox(firefox_profile=fp) 

#get url 
driver.get(url) 

#get element to click 
href = 'javascript:vCard("../webportal/perform.v?obj=ve_oid:poid:Z1tOl9NPl44TqzcSkLMUwG3DtW3D&action=vCard")' 
elements = driver.find_elements_by_tag_name('a') 
for e in elements: 
    if e.get_attribute("href") == href: 
     element = e 

#click on element 
element.click() 

#deal with pop up 
driver.switch_to_alert().accept() 

回答

1

考慮到它忽略了從不保存到磁盤選項,我的猜測將是您嘗試使用的MIME類型。

按照wiki上的電子名片,因爲第4版,他們棄用類型text/x-vcard

嘗試使用MIME類型

text/vcard 

如果不工作,那麼你可能可以指定通配符類型..

*/* 

此外,您的代碼有一些極端優化的空間。而不是循環瀏覽頁面上的所有A元素,只需使用CSS選擇器即可!

driver.find_element_by_css("a[href*='action=vCard']").click() 
+0

感謝您的回答。該代碼適用於大多數其他網站,該特定網站上的問題是似乎放棄我的Firefox設置的JavaScript警報。任何方式來避免這種情況? –

+0

,這是毫無意義的..如何將一個JavaScript警報清除您的設置..我認爲你錯過了一些東西 – sircapsalot

+0

我玩過這個相當多的,對我可能會失蹤的任何想法? –

相關問題