在iframe中找不到元素



我试图从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标签,但是它找不到它

我现在发现dyanmic_shipping_listid="shipping_rates"div内,而不是在iframe global_popup_login_frame内。因此,在iframe内搜索将没有结果,因此出现错误。但是调用

browser.find_by_id("dyanmic_shipping_list").find_by_tag("img")[1]['src']

导致

u'http://misc.dresslink.com/nap/images/images_common/icon-china.jpg'

这是你想要的吗?

编辑:我使用firefox作为网页浏览器,而不是phantomjs。两者的命令基本相同,因此您可以使用firefox开发程序,然后让它与phantomjs一起工作。使用firefox,你还可以使用firebug等插件检查页面,这将节省你大量的时间

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

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)

相关内容

  • 没有找到相关文章

最新更新