python写入数据到html并嵌套在iframe_Selenium-在一个页面中获取所有iframe(甚至嵌套的iframe)?...

我找不到一个有几层嵌套框架的网站来完全测试这个概念,但是我可以在一个只有一层嵌套框架的网站上测试它。因此,这可能需要一些调试来处理更深层次的嵌套。此外,此代码假定每个iframe都有一个name属性。

我相信使用递归函数可以解决这个问题,下面是一个数据结构示例:def frame_search(path):

framedict = {}

for child_frame in browser.find_elements_by_tag_name('frame'):

child_frame_name = child_frame.get_attribute('name')

framedict[child_frame_name] = {'framepath' : path, 'children' : {}}

xpath = '//frame[@name="{}"]'.format(child_frame_name)

browser.switch_to.frame(browser.find_element_by_xpath(xpath))

framedict[child_frame_name]['children'] = frame_search(framedict[child_frame_name]['framepath']+[child_frame_name])

...

do something involving this child_frame

...

browser.switch_to.default_content()

if len(framedict[child_frame_name]['framepath'])>0:

for parent in framedict[child_frame_name]['framepath']:

parent_xpath = '//frame[@name="{}"]'.format(parent)

browser.switch_to.frame(browser.find_element_by_xpath(parent_xpath))

return framedict

你可以通过调用:frametree = iframe_search([])来启动它,然后framedict将最终看起来像这样:frametree =

{'child1' : 'framepath' : [], 'children' : {'child1.1' : 'framepath' : ['child1'], 'children' : {...etc}},

'child2' : 'framepath' : [], 'children' : {'child2.1' : 'framepath' : ['child2'], 'children' : {...etc}}}

注意:我之所以写这篇文章是为了使用框架的属性来识别它们,而不是仅仅使用find_elements方法的结果,是因为我发现在某些场景中,在页面打开太久之后,Selenium会抛出一个陈旧的数据异常,而这些响应不再有用。显然,框架的属性不会改变,所以使用xpath更稳定一些。希望这有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值