我正在使用 Playwright 登录网站并提取一些数据。登录后,我必须单击一个按钮来指定我的用户类型。其中有两个按钮,检查网页后,两个按钮看起来几乎相同。
对于第一个按钮,我不想单击:
<div ng-repeat="model in vm.AvailableUserModes" ng-scope>
<div class="panel panel-default ng-isolate-scope tnt-busy-min-height tnt-busy-truncate"
tnt- busy-bool="vm.SettingUserMode" position: relative;>
...
<div class='panel-body'>
...
<button type="button" class="btn btn btn-lg btn-block btn-default"
ng-click="vm.SetUserModeForCurrentUser(model)" style="padding-top:5px;"> == $0
"Continue as "
<span ngl-bind="model.Name|splitCamelCase" class="ng-binding"> User1</span>
</button>
</div>
</div>
</div>
对于第二个按钮,我确实想单击:
<div ng-repeat="model in vm.AvailableUserModes" ng-scope>
<div class="panel panel-default ng-isolate-scope tnt-busy-min-height tnt-busy-truncate"
tnt- busy-bool="vm.SettingUserMode" position: relative;>
...
<div class='panel-body'>
...
<button type="button" class="btn btn btn-lg btn-block btn-default"
ng-click="vm.SetUserModeForCurrentUser(model)" style="padding-top:5px;">
"Continue as "
<span ngl-bind="model.Name|splitCamelCase" class="ng-binding"> User2</span>
</button>
</div>
</div>
</div>
对于登录,按钮的类型为“提交”,因此我可以使用 page.click(button[type=submit])。使用 page.click(button[type=button]) 不起作用(它找不到元素并继续搜索),但我不知道还能用什么来定位这些按钮,或者如何仅选择第二个(我看到的唯一区别是我不想点击的按钮上的 ==$0)。
这是我的代码(删除了 URL、用户名和密码):
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup
with sync_playwright() as p:
# Open Browser
browser = p.chromium.launch(headless=False, slow_mo=500)
page = browser.new_page()
page.goto('URL', timeout=0)
# Log In
page.fill('input#Username', 'username')
page.click('button[type=submit]')
page.fill('input#password', 'password')
page.click('button[type=submit]')
# Continue as User2
page.is_visible('div.panel-heading') # wait for User2 button to appear
# first attempt to click User2 button does not find element and terminate
page.click('button[type=button]')
# when exiting manually, message below shows in terminal
# - retrying click action, attempt #17
# - waiting 500ms
# - waiting for element to be visible, enabled and stable
# - element is not visible
# unable to locate with text using await because SyntaxError: 'await' outside function
# await page.locator('button:text("Continue as User2")').click();
您能否创建一个 MRE(最小可重复示例)或向我们提供您的结果快照,以便我们更好地理解您的问题?这是一个指南。 https://stackoverflow.com/help/minimal-reproducible-example