engine
engine copied to clipboard
Support `:has()` pseudo-selector
For some complex documents layout, the :has() CSS4 relational selector can prove very useful. However, using it in a declaration yields the following error:
Extract failed: unknown pseudo-class selector ':has(>[name=contact-points-for-competent-authorities-in-eu-countries]'
From the following tentative declaration:
{
"name": "Telegram",
"documents": {
"Privacy Policy": {
"fetch": "https://telegram.org/privacy",
"select": ".tl_page_container"
},
"Terms of Service": {
"fetch": "https://telegram.org/tos",
"select": ".tl_page_container"
},
"Developer Terms": {
"fetch": "https://core.telegram.org/api/terms",
"select": "#dev_page_content_wrap",
"remove": ".breadcrumb"
},
"Imprint": {
"fetch": "https://telegram.org/faq?setln=en",
"select": [
{
"startBefore": "h4:has(> [name=q-who-are-the-people-behind-telegram])",
"endBefore": "h4:has(> [name=q-who-are-the-people-behind-telegram]) + h4"
},
{
"startBefore": "h4:has(> [name=q-where-is-telegram-based])",
"endBefore": "h4:has(> [name=q-where-is-telegram-based]) + h4"
}
]
},
"Vulnerability Disclosure Policy": {
"fetch": "https://core.telegram.org/bug-bounty",
"select": ".dev_page"
},
"Community Guidelines": {
"fetch": "https://telegram.org/tos/eu-dsa?setln=en",
"select": ".tl_page_container",
"remove": [
{
"startBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries])",
"endBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries]) + h4"
},
{
"startBefore": "h4:has(> [name=average-monthly-active-recipients-of-service-in-the-eu])",
"endBefore": "h4:has(> [name=average-monthly-active-recipients-of-service-in-the-eu]) + h4"
}
]
},
"Law Enforcement Guidelines": {
"combine": [
{
"fetch": "https://telegram.org/tos/eu-dsa?setln=en",
"select": [
{
"startBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries]",
"endBefore": "h4:has(> [name=contact-points-for-competent-authorities-in-eu-countries]) + h4"
}
]
},
{
"fetch": "https://telegram.org/faq?setln=en",
"select": [
{
"startBefore": "h4:has(> [name=q-do-you-process-data-requests])",
"endBefore": "h4:has(> [name=q-do-you-process-data-requests]) + h4"
}
]
}
]
},
"Copyright Claims Policy": {
"fetch": "https://telegram.org/faq?setln=en",
"select": [
{
"startBefore": "h4:has(> [name=q-a-bot-or-channel-is-infringing-on-my-copyright-what-do-i-do])",
"endBefore": "h4:has(> [name=q-a-bot-or-channel-is-infringing-on-my-copyright-what-do-i-do]) + h4"
}
]
},
"Single Sign-On Policy": {
"fetch": "https://telegram.org/faq?setln=en",
"select": [
{
"startBefore": "h4:has(> [name=passport])",
"endBefore": "h4:has(> [name=passport]) + h4"
}
]
},
"Complaints Policy": {
"fetch": "https://telegram.org/faq?setln=en",
"select": [
{
"startBefore": "h4:has(> [name=q-do-you-process-take-down-requests-from-third-parties])",
"endBefore": "h4:has(> [name=q-do-you-process-take-down-requests-from-third-parties]) + h4"
}
]
}
}
}