如何使用Python中的nodriver库通过XPath访问网页上的元素?

问题描述 投票:0回答:1

我尝试编写一个 wait_for_xpath 函数,但无法创建 Element 类来使用 dom.py 模块与网页上的元素进行交互。

这是代码:

async def wait_for_xpath(
        xpath: str,
        tab: Tab,
        timeout: int = 10
) -> Element:
    await tab.send(cdp.dom.enable())
    loop = asyncio.get_running_loop()
    now = loop.time()
    search_id, count = await tab.send(cdp.dom.perform_search(query=xpath))
    while count == 0:
        if loop.time() - now >= timeout:
            raise TimeoutError(f"Timeout waiting for xpath: {xpath}")
        await tab.sleep(0.5)
        search_id, count = await tab.send(cdp.dom.perform_search(query=xpath))
    node_id = await tab.send(cdp.dom.push_node_by_path_to_frontend(xpath))
    node = await tab.send(cdp.dom.describe_node(node_id))
    return Element(node, tab, node)

非常感谢您的提前帮助!

我尝试实现一个nodriver库中没有的功能,但没有成功。

python python-3.x xpath xml-parsing
1个回答
0
投票

您可以使用内置的 tab.find(xpath) 函数。

例如:

create_account = await tab.find("/html/body/div/p[2]/a")
await create_account.click()
© www.soinside.com 2019 - 2024. All rights reserved.