playwright中切换窗口iframe的操作

当元素位于iframe内置窗口下的时候,直接对元素定位是定位不到的,需要先切换到该窗口下:
示例代码:
在这里插入图片描述
想定位到iframe中的类型为“animal"的元素:

from playwright.sync_api import sync_playwright
p=sync_playwright().start()
browser=p.chromium.launch(headless=False)
page=browser.new_page()
page.goto("https://cdn2.byhy.net/files/selenium/sample2.html")
frame = page.frame_locator("iframe[src='sample1.html']")

# 再 在其内部进行定位
lcs = frame.locator('.animal').all()


playwright中切换窗口相较于selenium中的切换窗口switch_to.frame的优点在于,不用来回切换窗口:比如一个元素在iframe的框架外,另一个元素在iframe的框架内
那使用selenium的定位方法时,要先切换进去,在切换出来:

wd.switch_to.frame('innerFrame')
wd.switch_to.default_content()//切换回原来的窗口

但是使用playwright的话就不用,代码可以这样写:
先创建一个browsercontext对象context,再通过context创建page

from playwright.sync_api import sync_playwright
pw = sync_playwright().start()

browser = pw.chromium.launch(headless=False)

# 创建 BrowserContext 对象
context = browser.new_context()

# 通过context 创建page
page = context.new_page() 

page.goto("https://cdn2.byhy.net/files/selenium/sample3.html")

# 点击链接,打开新窗口
page.locator("a").click()

# 等待2秒, 不能用 time.sleep
page.wait_for_timeout(2000)

# pages属性是 所有窗口对应Page对象的列表
for pg in  context.pages:
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if '必应' in pg.title():
        break

print(pg.title()) 

这样就不用来回切换窗口了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值