CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-pyobjc-framework-webkit

Python bindings for Apple's WebKit and JavaScriptCore frameworks on macOS, enabling web browser functionality and JavaScript execution in Python applications

Pending
Overview
Eval results
Files

dom-manipulation.mddocs/

DOM Manipulation

Complete Document Object Model classes for programmatic web content manipulation. Provides access to HTML elements, events, CSS styles, and document structure through Python bindings to WebKit's DOM implementation.

Capabilities

Document Access

DOMDocument

Root document object providing access to the entire DOM tree and document-level operations.

class DOMDocument:
    # Element creation and access
    def createElement_(self, tagName: str) -> DOMElement: ...
    def createTextNode_(self, data: str) -> DOMText: ...
    def createComment_(self, data: str) -> DOMComment: ...
    def createDocumentFragment(self) -> DOMDocumentFragment: ...
    def getElementById_(self, elementId: str) -> DOMElement: ...
    def getElementsByTagName_(self, tagName: str) -> DOMNodeList: ...
    def getElementsByClassName_(self, className: str) -> DOMNodeList: ...
    
    # Document properties
    @property
    def documentElement(self) -> DOMElement: ...
    @property
    def body(self) -> DOMHTMLElement: ...
    @property
    def head(self) -> DOMHTMLElement: ...
    @property
    def title(self) -> str: ...
    @property
    def URL(self) -> str: ...
    @property
    def domain(self) -> str: ...
    @property
    def cookie(self) -> str: ...
    @property
    def lastModified(self) -> str: ...
    @property
    def characterSet(self) -> str: ...
    @property
    def contentType(self) -> str: ...
    @property
    def doctype(self) -> DOMDocumentType: ...
    
    # Document manipulation
    def importNode_deep_(self, importedNode: DOMNode, deep: bool) -> DOMNode: ...
    def adoptNode_(self, source: DOMNode) -> DOMNode: ...
    
    # Focus and editing
    def hasFocus(self) -> bool: ...
    def execCommand_(self, command: str) -> bool: ...
    def execCommand_userInterface_value_(self, command: str, userInterface: bool, value: str) -> bool: ...
    def queryCommandEnabled_(self, command: str) -> bool: ...
    def queryCommandIndeterm_(self, command: str) -> bool: ...
    def queryCommandState_(self, command: str) -> bool: ...
    def queryCommandSupported_(self, command: str) -> bool: ...
    def queryCommandValue_(self, command: str) -> str: ...
    
    # Ranges and selection
    def createRange(self) -> DOMRange: ...
    def getSelection(self) -> DOMSelection: ...
    
    # Event handling
    def addEventListener_listener_useCapture_(self, type: str, listener: callable, useCapture: bool): ...
    def removeEventListener_listener_useCapture_(self, type: str, listener: callable, useCapture: bool): ...
    
    # CSS and styles
    def getComputedStyle_pseudoElement_(self, element: DOMElement, pseudoElement: str) -> DOMCSSStyleDeclaration: ...
    def getMatchedCSSRules_pseudoElement_authorOnly_(self, element: DOMElement, pseudoElement: str, authorOnly: bool) -> DOMCSSRuleList: ...

DOMHTMLDocument

HTML-specific document functionality extending DOMDocument.

class DOMHTMLDocument(DOMDocument):
    def open(self): ...
    def close(self): ...
    def write_(self, text: str): ...
    def writeln_(self, text: str): ...
    
    @property
    def images(self) -> DOMHTMLCollection: ...
    @property
    def applets(self) -> DOMHTMLCollection: ...
    @property
    def links(self) -> DOMHTMLCollection: ...
    @property
    def forms(self) -> DOMHTMLCollection: ...
    @property
    def anchors(self) -> DOMHTMLCollection: ...
    @property
    def embeds(self) -> DOMHTMLCollection: ...
    @property
    def plugins(self) -> DOMHTMLCollection: ...
    @property
    def scripts(self) -> DOMHTMLCollection: ...
    
    def hasFocus(self) -> bool: ...

Element Manipulation

DOMElement

Base element class for all HTML and XML elements.

class DOMElement(DOMNode):
    # Attribute access
    def getAttribute_(self, name: str) -> str: ...
    def setAttribute_value_(self, name: str, value: str): ...
    def removeAttribute_(self, name: str): ...
    def hasAttribute_(self, name: str) -> bool: ...
    def getAttributeNode_(self, name: str) -> DOMAttr: ...
    def setAttributeNode_(self, newAttr: DOMAttr) -> DOMAttr: ...
    def removeAttributeNode_(self, oldAttr: DOMAttr) -> DOMAttr: ...
    
    # Namespaced attributes
    def getAttributeNS_localName_(self, namespaceURI: str, localName: str) -> str: ...
    def setAttributeNS_qualifiedName_value_(self, namespaceURI: str, qualifiedName: str, value: str): ...
    def removeAttributeNS_localName_(self, namespaceURI: str, localName: str): ...
    def hasAttributeNS_localName_(self, namespaceURI: str, localName: str) -> bool: ...
    def getAttributeNodeNS_localName_(self, namespaceURI: str, localName: str) -> DOMAttr: ...
    def setAttributeNodeNS_(self, newAttr: DOMAttr) -> DOMAttr: ...
    
    # Element properties
    @property
    def tagName(self) -> str: ...
    @property
    def id(self) -> str: ...
    @property
    def className(self) -> str: ...
    @property
    def innerHTML(self) -> str: ...
    @property
    def outerHTML(self) -> str: ...
    @property
    def innerText(self) -> str: ...
    @property
    def outerText(self) -> str: ...
    
    # Element traversal
    def getElementsByTagName_(self, name: str) -> DOMNodeList: ...
    def getElementsByTagNameNS_localName_(self, namespaceURI: str, localName: str) -> DOMNodeList: ...
    def getElementsByClassName_(self, name: str) -> DOMNodeList: ...
    
    # Element positioning and size
    @property
    def clientWidth(self) -> int: ...
    @property
    def clientHeight(self) -> int: ...
    @property
    def scrollWidth(self) -> int: ...
    @property
    def scrollHeight(self) -> int: ...
    @property
    def scrollLeft(self) -> int: ...
    @property
    def scrollTop(self) -> int: ...
    @property
    def offsetWidth(self) -> int: ...
    @property
    def offsetHeight(self) -> int: ...
    @property
    def offsetLeft(self) -> int: ...
    @property
    def offsetTop(self) -> int: ...
    @property
    def offsetParent(self) -> DOMElement: ...
    
    # Scrolling
    def scrollIntoView_(self, alignToTop: bool): ...
    def scrollIntoViewIfNeeded_(self, centerIfNeeded: bool): ...
    def scrollByLines_(self, lines: int): ...
    def scrollByPages_(self, pages: int): ...
    
    # Element queries
    def querySelector_(self, selectors: str) -> DOMElement: ...
    def querySelectorAll_(self, selectors: str) -> DOMNodeList: ...
    
    # Element relationships
    def contains_(self, element: DOMElement) -> bool: ...
    def webkitMatchesSelector_(self, selectors: str) -> bool: ...
    
    # Style access
    @property
    def style(self) -> DOMCSSStyleDeclaration: ...

DOMHTMLElement

Base class for HTML elements with HTML-specific functionality.

class DOMHTMLElement(DOMElement):
    @property
    def title(self) -> str: ...
    @property
    def lang(self) -> str: ...
    @property
    def dir(self) -> str: ...
    @property
    def tabIndex(self) -> int: ...
    @property
    def accessKey(self) -> str: ...
    @property
    def contentEditable(self) -> str: ...
    def isContentEditable(self) -> bool: ...
    @property
    def draggable(self) -> bool: ...
    @property
    def spellcheck(self) -> bool: ...
    @property
    def hidden(self) -> bool: ...
    
    # Focus management
    def focus(self): ...
    def blur(self): ...
    def click(self): ...

HTML Form Elements

DOMHTMLInputElement

HTML input element with form-specific functionality.

class DOMHTMLInputElement(DOMHTMLElement):
    @property
    def type(self) -> str: ...
    @property
    def name(self) -> str: ...
    @property
    def value(self) -> str: ...
    @property
    def checked(self) -> bool: ...
    @property
    def defaultChecked(self) -> bool: ...
    @property
    def disabled(self) -> bool: ...
    @property
    def readOnly(self) -> bool: ...
    @property
    def maxLength(self) -> int: ...
    @property
    def size(self) -> int: ...
    @property
    def alt(self) -> str: ...
    @property
    def src(self) -> str: ...
    @property
    def useMap(self) -> str: ...
    @property
    def accept(self) -> str: ...
    @property
    def accessKey(self) -> str: ...
    @property
    def align(self) -> str: ...
    @property
    def defaultValue(self) -> str: ...
    @property
    def form(self) -> DOMHTMLFormElement: ...
    @property
    def selectionStart(self) -> int: ...
    @property
    def selectionEnd(self) -> int: ...
    @property
    def autofocus(self) -> bool: ...
    @property
    def multiple(self) -> bool: ...
    @property
    def placeholder(self) -> str: ...
    @property
    def required(self) -> bool: ...
    @property
    def autocomplete(self) -> str: ...
    @property
    def files(self) -> DOMFileList: ...
    
    def select(self): ...
    def setSelectionRange_end_(self, start: int, end: int): ...
    def click(self): ...

DOMHTMLSelectElement

HTML select element for dropdown lists.

class DOMHTMLSelectElement(DOMHTMLElement):
    @property
    def type(self) -> str: ...
    @property
    def selectedIndex(self) -> int: ...
    @property
    def value(self) -> str: ...
    @property
    def length(self) -> int: ...
    @property
    def form(self) -> DOMHTMLFormElement: ...
    @property
    def options(self) -> DOMHTMLOptionsCollection: ...
    @property
    def disabled(self) -> bool: ...
    @property
    def multiple(self) -> bool: ...
    @property
    def name(self) -> str: ...
    @property
    def size(self) -> int: ...
    @property
    def tabIndex(self) -> int: ...
    @property
    def autofocus(self) -> bool: ...
    @property
    def required(self) -> bool: ...
    
    def add_before_(self, element: DOMHTMLElement, before: DOMHTMLElement): ...
    def remove_(self, index: int): ...
    def namedItem_(self, name: str) -> DOMNode: ...
    def item_(self, index: int) -> DOMNode: ...

DOMHTMLOptionElement

HTML option element for select lists.

class DOMHTMLOptionElement(DOMHTMLElement):
    @property
    def form(self) -> DOMHTMLFormElement: ...
    @property
    def defaultSelected(self) -> bool: ...
    @property
    def text(self) -> str: ...
    @property
    def index(self) -> int: ...
    @property
    def disabled(self) -> bool: ...
    @property
    def label(self) -> str: ...
    @property
    def selected(self) -> bool: ...
    @property
    def value(self) -> str: ...

DOMHTMLTextAreaElement

HTML textarea element for multi-line text input.

class DOMHTMLTextAreaElement(DOMHTMLElement):
    @property
    def defaultValue(self) -> str: ...
    @property
    def form(self) -> DOMHTMLFormElement: ...
    @property
    def accessKey(self) -> str: ...
    @property
    def cols(self) -> int: ...
    @property
    def disabled(self) -> bool: ...
    @property
    def name(self) -> str: ...
    @property
    def readOnly(self) -> bool: ...
    @property
    def rows(self) -> int: ...
    @property
    def tabIndex(self) -> int: ...
    @property
    def type(self) -> str: ...
    @property
    def value(self) -> str: ...
    @property
    def selectionStart(self) -> int: ...
    @property
    def selectionEnd(self) -> int: ...
    @property
    def textLength(self) -> int: ...
    @property
    def autofocus(self) -> bool: ...
    @property
    def placeholder(self) -> str: ...
    @property
    def required(self) -> bool: ...
    @property
    def wrap(self) -> str: ...
    
    def select(self): ...
    def setSelectionRange_end_(self, start: int, end: int): ...

DOMHTMLButtonElement

HTML button element.

class DOMHTMLButtonElement(DOMHTMLElement):
    @property
    def form(self) -> DOMHTMLFormElement: ...
    @property
    def accessKey(self) -> str: ...
    @property
    def disabled(self) -> bool: ...
    @property
    def name(self) -> str: ...
    @property
    def tabIndex(self) -> int: ...
    @property
    def type(self) -> str: ...
    @property
    def value(self) -> str: ...
    @property
    def autofocus(self) -> bool: ...
    def willValidate(self) -> bool: ...
    def setWillValidate_(self, willValidate: bool): ...

Other HTML Elements

DOMHTMLImageElement

HTML image element.

class DOMHTMLImageElement(DOMHTMLElement):
    @property
    def name(self) -> str: ...
    @property
    def align(self) -> str: ...
    @property
    def alt(self) -> str: ...
    @property
    def border(self) -> str: ...
    @property
    def height(self) -> int: ...
    @property
    def hspace(self) -> int: ...
    @property
    def isMap(self) -> bool: ...
    @property
    def longDesc(self) -> str: ...
    @property
    def src(self) -> str: ...
    @property
    def useMap(self) -> str: ...
    @property
    def vspace(self) -> int: ...
    @property
    def width(self) -> int: ...
    @property
    def complete(self) -> bool: ...
    @property
    def lowsrc(self) -> str: ...
    @property
    def naturalHeight(self) -> int: ...
    @property
    def naturalWidth(self) -> int: ...
    @property
    def x(self) -> int: ...
    @property
    def y(self) -> int: ...

DOMHTMLLinkElement

HTML link element.

class DOMHTMLLinkElement(DOMHTMLElement):
    @property
    def disabled(self) -> bool: ...
    @property
    def charset(self) -> str: ...
    @property
    def href(self) -> str: ...
    @property
    def hreflang(self) -> str: ...
    @property
    def media(self) -> str: ...
    @property
    def rel(self) -> str: ...
    @property
    def rev(self) -> str: ...
    @property
    def target(self) -> str: ...
    @property
    def type(self) -> str: ...
    @property
    def sheet(self) -> DOMStyleSheet: ...

Node Hierarchy

DOMNode

Base node class for all DOM objects.

class DOMNode:
    # Node types
    ELEMENT_NODE = 1
    ATTRIBUTE_NODE = 2
    TEXT_NODE = 3
    CDATA_SECTION_NODE = 4
    ENTITY_REFERENCE_NODE = 5
    ENTITY_NODE = 6
    PROCESSING_INSTRUCTION_NODE = 7
    COMMENT_NODE = 8
    DOCUMENT_NODE = 9
    DOCUMENT_TYPE_NODE = 10
    DOCUMENT_FRAGMENT_NODE = 11
    NOTATION_NODE = 12
    
    # Node properties
    @property
    def nodeName(self) -> str: ...
    @property
    def nodeValue(self) -> str: ...
    @property
    def nodeType(self) -> int: ...
    @property
    def parentNode(self) -> DOMNode: ...
    @property
    def childNodes(self) -> DOMNodeList: ...
    @property
    def firstChild(self) -> DOMNode: ...
    @property
    def lastChild(self) -> DOMNode: ...
    @property
    def previousSibling(self) -> DOMNode: ...
    @property
    def nextSibling(self) -> DOMNode: ...
    @property
    def attributes(self) -> DOMNamedNodeMap: ...
    @property
    def ownerDocument(self) -> DOMDocument: ...
    @property
    def namespaceURI(self) -> str: ...
    @property
    def prefix(self) -> str: ...
    @property
    def localName(self) -> str: ...
    @property
    def textContent(self) -> str: ...
    
    # Node manipulation
    def insertBefore_refChild_(self, newChild: DOMNode, refChild: DOMNode) -> DOMNode: ...
    def replaceChild_oldChild_(self, newChild: DOMNode, oldChild: DOMNode) -> DOMNode: ...
    def removeChild_(self, oldChild: DOMNode) -> DOMNode: ...
    def appendChild_(self, newChild: DOMNode) -> DOMNode: ...
    def hasChildNodes(self) -> bool: ...
    def cloneNode_(self, deep: bool) -> DOMNode: ...
    def normalize(self): ...
    
    # Node comparison  
    def isSupported_version_(self, feature: str, version: str) -> bool: ...
    def hasAttributes(self) -> bool: ...
    def isSameNode_(self, other: DOMNode) -> bool: ...
    def isEqualNode_(self, other: DOMNode) -> bool: ...
    def compareDocumentPosition_(self, other: DOMNode) -> int: ...
    def contains_(self, other: DOMNode) -> bool: ...

Event System

DOMEvent

Base event class for all DOM events.

class DOMEvent:
    # Event phases
    CAPTURING_PHASE = 1
    AT_TARGET = 2
    BUBBLING_PHASE = 3
    
    @property
    def type(self) -> str: ...
    @property
    def target(self) -> DOMEventTarget: ...
    @property
    def currentTarget(self) -> DOMEventTarget: ...
    @property
    def eventPhase(self) -> int: ...
    def bubbles(self) -> bool: ...
    def cancelable(self) -> bool: ...
    @property
    def timeStamp(self) -> int: ...
    
    def stopPropagation(self): ...
    def preventDefault(self): ...
    def initEvent_canBubbleArg_cancelableArg_(self, eventTypeArg: str, canBubbleArg: bool, cancelableArg: bool): ...
    
    # Legacy properties
    def cancelBubble(self) -> bool: ...
    def setCancelBubble_(self, cancelBubble: bool): ...
    def returnValue(self) -> bool: ...
    def setReturnValue_(self, returnValue: bool): ...
    @property
    def srcElement(self) -> DOMEventTarget: ...

DOMUIEvent

User interface event extending DOMEvent.

class DOMUIEvent(DOMEvent):
    @property
    def view(self) -> DOMAbstractView: ...
    @property
    def detail(self) -> int: ...
    @property
    def which(self) -> int: ...
    
    def initUIEvent_canBubble_cancelable_view_detail_(self, type: str, canBubble: bool, cancelable: bool, view: DOMAbstractView, detail: int): ...

DOMMouseEvent

Mouse event extending DOMUIEvent.

class DOMMouseEvent(DOMUIEvent):
    @property
    def screenX(self) -> int: ...
    @property
    def screenY(self) -> int: ...
    @property
    def clientX(self) -> int: ...
    @property
    def clientY(self) -> int: ...
    @property
    def ctrlKey(self) -> bool: ...
    @property
    def shiftKey(self) -> bool: ...
    @property
    def altKey(self) -> bool: ...
    @property
    def metaKey(self) -> bool: ...
    @property
    def button(self) -> int: ...
    @property
    def relatedTarget(self) -> DOMEventTarget: ...
    @property
    def offsetX(self) -> int: ...
    @property
    def offsetY(self) -> int: ...
    @property
    def x(self) -> int: ...
    @property
    def y(self) -> int: ...
    @property
    def fromElement(self) -> DOMNode: ...
    @property
    def toElement(self) -> DOMNode: ...
    
    def initMouseEvent_canBubble_cancelable_view_detail_screenX_screenY_clientX_clientY_ctrlKey_altKey_shiftKey_metaKey_button_relatedTarget_(self, type: str, canBubble: bool, cancelable: bool, view: DOMAbstractView, detail: int, screenX: int, screenY: int, clientX: int, clientY: int, ctrlKey: bool, altKey: bool, shiftKey: bool, metaKey: bool, button: int, relatedTarget: DOMEventTarget): ...

DOMKeyboardEvent

Keyboard event extending DOMUIEvent.

class DOMKeyboardEvent(DOMUIEvent):
    # Key locations
    KEY_LOCATION_STANDARD = 0
    KEY_LOCATION_LEFT = 1
    KEY_LOCATION_RIGHT = 2
    KEY_LOCATION_NUMPAD = 3
    
    @property
    def key(self) -> str: ...
    @property
    def code(self) -> str: ...
    @property
    def location(self) -> int: ...
    @property
    def ctrlKey(self) -> bool: ...
    @property
    def shiftKey(self) -> bool: ...
    @property
    def altKey(self) -> bool: ...
    @property
    def metaKey(self) -> bool: ...
    @property
    def repeat(self) -> bool: ...
    @property
    def isComposing(self) -> bool: ...
    @property
    def charCode(self) -> int: ...
    @property
    def keyCode(self) -> int: ...
    @property
    def which(self) -> int: ...
    
    def getModifierState_(self, key: str) -> bool: ...

CSS and Styling

DOMCSSStyleDeclaration

CSS style declaration for element styling.

class DOMCSSStyleDeclaration:
    @property
    def cssText(self) -> str: ...
    @property
    def length(self) -> int: ...
    @property
    def parentRule(self) -> DOMCSSRule: ...
    
    def getPropertyValue_(self, propertyName: str) -> str: ...
    def getPropertyCSSValue_(self, propertyName: str) -> DOMCSSValue: ...
    def removeProperty_(self, propertyName: str) -> str: ...
    def getPropertyPriority_(self, propertyName: str) -> str: ...
    def setProperty_value_priority_(self, propertyName: str, value: str, priority: str): ...
    def item_(self, index: int) -> str: ...
    def isPropertyImplicit_(self, propertyName: str) -> bool: ...

Collections and Lists

DOMNodeList

List of DOM nodes.

class DOMNodeList:
    @property
    def length(self) -> int: ...
    
    def item_(self, index: int) -> DOMNode: ...

DOMHTMLCollection

Collection of HTML elements.

class DOMHTMLCollection:
    @property
    def length(self) -> int: ...
    
    def item_(self, index: int) -> DOMNode: ...
    def namedItem_(self, name: str) -> DOMNode: ...

Usage Examples

Finding and Modifying Elements

import WebKit

# Assume you have a WebView instance
web_view = get_web_view()  # Your WebView instance
document = web_view.mainFrame().DOMDocument()

# Find element by ID
element = document.getElementById_("myButton")
if element:
    # Modify attributes
    element.setAttribute_value_("class", "highlighted")
    
    # Change content
    element.setInnerHTML_("<strong>Click me!</strong>")
    
    # Add event listener (in practice, you'd use JavaScript for this)
    # This is just to show the API structure
    print(f"Element tag: {element.tagName()}")
    print(f"Element ID: {element.id()}")

# Find elements by tag name
inputs = document.getElementsByTagName_("input")
for i in range(inputs.length()):
    input_element = inputs.item_(i)
    if hasattr(input_element, 'type') and input_element.type() == "text":
        input_element.setValue_("Default text")

Working with Forms

import WebKit

document = web_view.mainFrame().DOMDocument()

# Find form
form = document.getElementById_("myForm")

# Get all input elements in the form
inputs = form.getElementsByTagName_("input")

# Process each input
for i in range(inputs.length()):
    input_elem = inputs.item_(i)
    
    if input_elem.type() == "text":
        print(f"Text input value: {input_elem.value()}")
        input_elem.setValue_("New value")
    
    elif input_elem.type() == "checkbox":
        print(f"Checkbox checked: {input_elem.checked()}")
        input_elem.setChecked_(True)

# Work with select elements
selects = form.getElementsByTagName_("select")
if selects.length() > 0:
    select_elem = selects.item_(0)
    print(f"Selected index: {select_elem.selectedIndex()}")
    select_elem.setSelectedIndex_(2)  # Select third option

Document Manipulation

import WebKit

document = web_view.mainFrame().DOMDocument()

# Create new elements
div = document.createElement_("div")
div.setAttribute_value_("id", "newDiv")
div.setAttribute_value_("class", "container")

# Create text content
text = document.createTextNode_("Hello, World!")
div.appendChild_(text)

# Add to document
body = document.body()
body.appendChild_(div)

# Execute document commands
document.execCommand_("selectAll")
print(f"Can cut: {document.queryCommandEnabled_('cut')}")

Install with Tessl CLI

npx tessl i tessl/pypi-pyobjc-framework-webkit

docs

constants.md

content-management.md

dom-manipulation.md

index.md

javascript-integration.md

legacy-webkit.md

modern-webkit.md

navigation.md

tile.json