splinter:在iframe中找不到元素

时间:2014-03-18 19:46:59

标签: python phantomjs splinter

我正在尝试点击名为“估算运费”的链接。来自http://www.dresslink.com/women-woolen-winter-trench-double-button-fur-collar-coat-p-9442.html  这将打开一个iframe叠加层,通过ajax获取内容并填充它。

这里是代码

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标签,但却无法找到它。

1 个答案:

答案 0 :(得分:0)

它没有很好的记录,所以需要一点时间来弄清楚如何去做,昨晚我遇到了同样的问题,所以我在这里发布了我的方法。 Splinter有一个非常简单的iframe解决方法!

with br.get_iframe('Name_of_iframe') as iframe:
    iframe.fill("Name_of_element_to_be_filled","Text_to_be_filled")

在我的情况下,元素的名称是随机生成的字符串,因此无法使用上述字符串。如果您遇到这样的问题,请通过标签找到它(比如我的情况下输入),从页面源计算iframe中输入标签顺序的数字。然后你可以使用它: -

with br.get_iframe('Name_of_iframe') as iframe:
    iframe.find_by_tag("tag_to_search")[index_number].fill(text_to_fill)