我尝试编写一个 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库中没有的功能,但没有成功。
您可以使用内置的 tab.find(xpath) 函数。
例如:
create_account = await tab.find("/html/body/div/p[2]/a")
await create_account.click()