我正在尝试点击名为“估算运费”的链接。来自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标签,但却无法找到它。
答案 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)