0

我正在尝试单击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标签,但它找不到它。

4

2 回答 2

1

我现在发现它dyanmic_shipping_list在一个divwithid="shipping_rates"而不是在 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 作为 webbrowser 而不是 phantomjs。两者的命令基本相同,因此您可以使用 firefox 开发程序,然后使其与 phantomjs 一起使用。使用 firefox,您还可以使用 firebug 等插件检查页面,这将为您节省大量时间

于 2014-03-18T20:53:15.810 回答
0

它没有很好的记录,所以需要一点时间来弄清楚如何去做,昨晚我遇到了同样的问题,所以我在这里发布我的方法。对于 iframe,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)
于 2015-08-11T06:27:09.357 回答