bud*_*mat 5 python iframe webautomation playwright playwright-python
我已经成功地在 python 中使用 Playwright 从页面中获取元素。我现在遇到了从嵌入iframe的文档中获取元素的挑战。作为示例,我使用了w3schools 页面来解释<option>element,该页面在 iframe 中显示结果。<option>我正在尝试从 iframe 中检索该元素的句柄。
获取页面上的 an 元素的“正常”方式page.querySelector()无法获取 an elementHandle,这只会打印<class 'NoneType'>:
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
element = page.querySelector('select')
print(type(element))
browser.close()
Run Code Online (Sandbox Code Playgroud)
我尝试首先显式获取 iframe 的句柄,但这会产生相同的结果 ( <class 'NoneType'>):
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
iframe = page.querySelector('iframe')
element = iframe.querySelector('select')
print(type(element))
browser.close()
Run Code Online (Sandbox Code Playgroud)
如何从 iframe 中获取内容?
事实证明我已经很接近了,但为了正确获取 iframe,我需要调用该contentFrame()方法。
返回引用 iframe 节点的元素句柄的内容框架,否则
null返回
然后,querySelector()将返回各自elementHandle就好了:
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
iframe = page.querySelector('iframe').contentFrame()
element = iframe.querySelector('select')
print(type(element))
print(element.innerHTML())
browser.close()
Run Code Online (Sandbox Code Playgroud)
成功打印
<class 'playwright.sync_api.ElementHandle'>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
Run Code Online (Sandbox Code Playgroud)
注意:如果有多个 iframe,则在检索句柄时只需使用一个属性即可。id要在上面的示例中通过其获取 iframe ,例如使用
iframe = page.querySelector('iframe[id=\"iframeResult\"]').contentFrame()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |