【问题标题】:Using Playwright for Python, how do I select (or find) an element?使用 Playwright for Python,如何选择(或查找)元素?
【发布时间】:2021-01-25 21:49:30
【问题描述】:

我正在尝试学习 Python 版本的 Playwright。见here

我想学习如何定位一个元素,这样我就可以做到 事情与它。比如打印内部的 HTML,点击它等等。

以下示例加载页面并打印 HTML

from playwright import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.newPage()
    page.goto('http://whatsmyuseragent.org/')
    print(page.innerHTML("*"))
    browser.close()

此页面包含一个元素

<div class="user-agent">
    <p class="intro-text">Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4238.0 Safari/537.36</p>
</div>

使用 Selenium,我可以像这样定位元素并打印它的内容

elem = driver.find_element_by_class_name("user-agent")
print(elem)
print(elem.get_attribute("innerHTML"))

我怎样才能在 Playwright 中做同样的事情?

#UPDATE# - 请注意,如果您想在 2021 年及以后运行它,当前版本的剧作家已将语法从 CamelCase 更改为 snake_case。

【问题讨论】:

    标签: python webautomation playwright playwright-python


    【解决方案1】:

    接受的答案不适用于较新版本的 Playwright。 (感谢@576i 指出这一点)

    以下是适用于较新版本的 Python 代码(使用 1.5 版测试):

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        page.goto('http://whatsmyuseragent.org/')
        ua = page.query_selector(".user-agent");
        print(ua.inner_html())
        browser.close()
    

    要仅获取文本,请使用inner_text() 函数。

    print(ua.inner_text())
    

    【讨论】:

    • 在撰写问题时,接受的答案是工作 Python 代码。从那时起,playwright 发生了一些变化,现在使用了更友好的 Python 表示法。 (许多其他较老的剧作家问题就是这种情况)
    • 知道了。谢谢。我正在编辑这个答案以反映这一点。
    【解决方案2】:

    根据最新官方python version Playwright,你应该使用:

    -> 代码:

    # userAgentSelector = ".user-agent"
    userAgentSelector = "div.user-agent"
    elementHandle = page.query_selector(userAgentSelector)
    uaHtml = elementHandle.inner_html()
    print("uaHtml=%s" % uaHtml)
    

    【讨论】:

      【解决方案3】:

      可以使用querySelector函数,然后调用innerHTML函数:

      handle = page.querySelector(".user-agent")
      print(handle.innerHTML())
      

      【讨论】:

      • AttributeError: 'Page' object has no attribute 'querySelector'
      • 在 Python 中为page.query_selector(".user-agent)
      • 请注意,python 的剧作家已将较新版本的语法从 querySelector 更改为 query_selector...如果您找到其他较旧、不再工作的剧作家答案,这可能就是原因.
      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 2020-10-17
      • 2022-11-04
      • 2023-03-16
      • 2021-01-26
      • 2021-11-21
      • 2021-02-10
      • 2020-10-29
      相关资源
      最近更新 更多