剧作家 (Python) 点击一个看似生成的框架?

playwright (Python) click in a seemingly generated frame?

我正在尝试使用 playwright 从设备与页面进行交互。从设备显示的初始页面我 select 我想要的选项卡来自 html 我看到使用 inspect with

page.click('id=laConfig')

对于显示的代码片段

<div id="nav" class="nav" style="width: 974px;">
        <span class="menu" id="iMenu3" onclick="ChangeFrame('log.asp',3)">
            <label id="laLog" name="laLog" class="mousepointer">Log</label>
        </span>
        <span class="menu menuBackground" id="iMenu4" onclick="ChangeFrame('paramconfig.asp',4)">
            <label id="laConfig" name="laConfig" class="mousepointer">Configuration</label>
        </span>
        <span class="logout" onclick="GoAway()">
            <label id="laExit" name="laExit" class="mousepointer">Logout</label>
        </span> 
    </div>

这导致我要加载的页面和参数配置框架加载。但我不知道如何走得更远。在检查中我可以看到这段代码

<iframe frameborder="0" scrolling="no" id="contentframe" name="contentframe" class="contentframe" src="paramconfig.asp" style="height: 619px; width: 938px;"></iframe>

这让我觉得它是从 paramconfig.asp 文件生成的

接下来我想 select 时间设置,我将鼠标悬停在该按钮上,然后在显示的页面中单击,但以下 select 都不起作用:

page.click('text=Time Settings')
page.click('id=aTimeSettings')

同样奇怪的是,我无法在检查中使用右键单击和复制命令复制我在检查中看到的代码。我在屏幕截图中看到了下面的代码,这就是我如何获得上面的文本和 ID。

我需要在 playwright 中做什么才能让它像我以用户身份通过​​其网页访问设备时一样单击时间设置按钮?

time setting html from inspect

您不能对位于不同页面(在 iframe 中)的元素使用 page.click。您需要 get a handle on the frame 并与之互动。

类似于:

frame = page.frame(name="frame-name")
frame.click("the selector of the element you want to click inside the frame")

the codegen feature of Playwright 可能会给您一些关于正确选择器等方面的灵感。不过从文档来看,它看起来像是生成 JavaScript 所以真的只是为了灵感。

(P.S。这里没有使用 Python 的经验)