鱼C论坛

 找回密码
 立即注册
查看: 1036|回复: 3

playwight里怎么判断button的2种状态

[复制链接]
发表于 2024-1-16 14:04:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<button type="button" class="btn-next" disabled="disabled">
<button type="button" class="btn-next">

playwight里怎么判断button的2种状态。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-16 14:05:00 | 显示全部楼层
在Playwright中,可以通过button元素的属性来判断其状态。一种常见的方法是使用`disabled`属性来判断按钮是否为禁用状态。以下是一个示例代码:
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto('https://example.com')
    
    # 获取按钮元素
    button_element = page.query_selector('button')
    
    # 判断按钮是否为禁用状态
    is_disabled = button_element.get_attribute('disabled')
    
    if is_disabled:
        print('按钮为禁用状态')
    else:
        print('按钮为可用状态')
    
    browser.close()

在这个例子中,我们首先导入Playwright库并启动一个Chromium浏览器实例。然后,我们打开一个页面(在本例中为`https://example.com`),并使用`query_selector`方法获取第一个按钮元素。接下来,我们使用`get_attribute`方法获取按钮元素的`disabled`属性值,并将其赋给`is_disabled`变量。最后,我们根据`is_disabled`变量的值来判断按钮的状态。

请注意,这只是一个示例,具体的代码可能因为页面结构和需求而有所不同。你需要根据具体情况,使用相关方法和属性来判断按钮的状态。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-16 15:51:17 | 显示全部楼层
最后一页的第1行又会被再取1次, 这是啥问题,循环的哪步有问题呢?
from playwright.sync_api import Playwright, sync_playwright, expect
import time


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=True)
    # browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://yxcx.cscse.edu.cn/rzyxmd")
    time.sleep(15)
    page.get_by_role("button", name="已 阅").click()
    page.locator("label").filter(has_text="F").click()
    page.get_by_text("法国").click()


    for i1 in range(1, 39):
        time.sleep(10)

        # 获取按钮元素
        button_element = page.query_selector('//*[@id="app"]/div/div[4]/button[2]')
        # 判断按钮是否为禁用状态
        is_disabled = button_element.get_attribute('disabled')
        if is_disabled:
            print('按钮为禁用状态')
            for i2 in range(1, 21):
                print(page.inner_text('//*[@id="app"]/div/div[3]/div[1]/div/div[2]/div[{}]'.format(str(i2))), file=f1)
            break
        else:
            # print('按钮为可用状态')
            for i3 in range(1, 21):
                print(page.inner_text('//*[@id="app"]/div/div[3]/div[1]/div/div[2]/div[{}]'.format(str(i3))), file=f1)

        page.get_by_role("button", name="").click()
        
        print('---------------------------------')

        

    page.close()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    with open('./fg13.txt','w',encoding='utf-8') as f1:
        run(playwright)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 15:52:14 | 显示全部楼层
blackantt 发表于 2024-01-16 15:51
最后一页的第1行又会被再取1次, 这是啥问题,循环的 ...


问题在于循环的第一个`for`循环中,你没有更新页面的内容,导致每次循环都是对同一个页面进行操作。在`for`循环的每一轮迭代中,在你获取按钮元素之前,你需要先等待页面加载完成。以下是修改后的代码示例:
from playwright.sync_api import Playwright, sync_playwright, expect
import time

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=True)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://yxcx.cscse.edu.cn/rzyxmd")
    time.sleep(15)
    page.get_by_role("button", name="已 阅").click()
    page.locator("label").filter(has_text="F").click()
    page.get_by_text("法国").click()

    for i1 in range(1, 39):
        time.sleep(10)
        button_element = page.query_selector('//*/div/div/button')
        is_disabled = button_element.get_attribute('disabled')

        if is_disabled:
            print('按钮为禁用状态')
            for i2 in range(1, 21):
                print(page.inner_text('//*/div/div/div/div/div/div'.format(str(i2))), file=f1)
            break
        else:
            print('按钮为可用状态')
            for i3 in range(1, 21):
                print(page.inner_text('//*/div/div/div/div/div/div'.format(str(i3))), file=f1)
        
        page.get_by_role("button", name="z").click()
        print('---------------------------------')

    page.close()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    with open('./fg13.txt','w',encoding='utf-8') as f1:
        run(playwright)

在每一次循环中,我们在获取按钮元素之前添加了一个适当的等待时间(`time.sleep(10)`)。这样可以确保页面已经加载并更新了内容。另外,我还将`page.close()`移动到循环外部,以避免在循环中多次关闭页面。请注意,你需要根据具体情况调整等待时间和其他代码细节。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表