В драматурге-питоне я знаю, что могу получить elementHandle, используя querySelector().
Пример (синхронизация):
from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch()
page = browser.newPage()
page.goto('https://duckduckgo.com/')
element = page.querySelector('input[id=\"search_form_input_homepage\"]')
Как мне получить элемент относительно this на основе этого elementHandle? т.е. родитель, бабушка и дедушка, братья и сестры, дети ручки?






Оригинальный ответ:
Использование querySelector() / querySelectorAll с
XPath (XML Path Language) позволяет получить elementHandle (соответственно набор дескрипторов). Вообще говоря, XPath можно использовать для навигации по элементам и атрибутам в XML-документе.
from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('https://duckduckgo.com/')
element = page.querySelector('input[id=\"search_form_input_homepage\"]')
parent = element.querySelector('xpath=..')
grandparent = element.querySelector('xpath=../..')
siblings = element.querySelectorAll('xpath=following-sibling::*')
children = element.querySelectorAll('xpath=child::*')
browser.close()
Обновление (22 июля 2022 г.):
Похоже, что browser.newPage() устарела, поэтому в более новых версиях драматурга функция называется browser.new_page() (обратите внимание на другое имя функции).
При желании сначала создайте контекст браузера (а затем закройте его) и вызовите new_page() в этом контексте.
Способ доступа к детям/родителям/прародителям/братьям и сестрам остается прежним.
from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('https://duckduckgo.com/')
element = page.querySelector('input[id=\"search_form_input_homepage\"]')
parent = element.querySelector('xpath=..')
grandparent = element.querySelector('xpath=../..')
siblings = element.querySelectorAll('xpath=following-sibling::*')
children = element.querySelectorAll('xpath=child::*')
context.close()
browser.close()
Принятый ответ находится в более старой версии драматурга. Используйте следующий формат для текущей версии, он будет работать.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
browser = browser_type.launch(headless=False)
context = browser.new_context()
page =context.new_page()
page.goto('https://duckduckgo.com/')
element = page.query_selector('input[id=\"search_form_input_homepage\"]')
parent = element.query_selector('xpath=..')
grandparent = element.query_selector('xpath=../..')
siblings = element.query_selector_all('xpath=following-sibling::*')
children = element.query_selector_all('xpath=child::*')
context.close()
browser.close()