0
我試圖點擊http://www.dresslink.com/women-woolen-winter-trench-double-button-fur-collar-coat-p-9442.html 中名爲'Estimate Shipping Fee'的鏈接,該鏈接將打開一個iframe覆蓋圖,通過ajax提取內容並填充它。splinter:在iframe中找不到元素
這裏的代碼
from splinter import Browser
browser = Browser('phantomjs')
def extract(url):
browser.visit(url)
browser.find_by_css(".floatl.shipping_fee a").click()
browser.is_element_present_by_id('global_popup_login_iframe', wait_time=10)
with browser.get_iframe('global_popup_login_iframe') as iframe:
iframe.is_element_present_by_id('dyanmic_shipping_list', wait_time=10)
shippingprice = iframe.find_by_tag('img')
print shippingprice[1]['src']
extract('http://www.dresslink.com/women-woolen-winter-trench-double-button-fur-collar-coat-p-9442.html'
的問題是,它似乎無法找到的iframe中的元素,我已經試過find_by_css,by_xpath,結果是一樣的。
splinter.exceptions.ElementDoesNotExist: no elements could be found with tag_name "img"
確實存在一個img標記,但它找不到它。
我試圖重現您的問題。到目前爲止,我被卡在'iframe.is_element_present_by_id('dyanmic_shipping_list',wait_time = 10)'。我猜這是一個拼寫錯誤,應該表示「dynamic_shipping_list」而不是「dyanmic_shipping_list」對嗎? 編輯:好的,它確實拼寫像這樣iframe的來源 '
等待,我只是再次檢查它,這是拼寫(dyanmic_shipping_list是正確的) – KJW
回答
我現在發現
dyanmic_shipping_list
位於div
的id="shipping_rates"
之內,而不在iframeglobal_popup_login_frame
之內。因此,在iframe中搜索將不會導致錯誤。但調用結果
是你想要的嗎?
編輯: 我用firefox作爲webbrowser而不是phantomjs。這兩個命令的主要內容都是相同的,所以你可以使用firefox開發你的程序,然後讓它使用phantomjs。 有了Firefox,你也可以檢查頁面插件像螢火蟲,什麼會爲你節省大量的時間
來源
2014-03-18 20:53:15 MaSp
大聲笑它甚至沒有內置iframe,我的壞。謝謝! – KJW
這沒有很好的文件,所以它需要一點時間來弄清楚如何去做,我是昨晚我也遇到了同樣的問題,所以我在這裏發佈我的方法。分裂對iframes有一個非常簡單的解決方法!
在我的情況下,該元素的名稱是隨機生成的字符串,因此,上述不能使用。如果遇到這樣的問題,可以通過標籤(例如我的輸入法)找到它,從頁面源計算iframe中輸入標籤順序中的數字。然後,你可以這樣做: -
來源
2015-08-11 06:27:09
相關問題