Skip to main content

yet another xpath generator

Create an xpath with an chainable and intuitive API.

Quickstart

Create the most simple xpath for a div element:

from yaxp import xpath

# //div
xpath.div

xpath objects are chainable:

# //div//h1
xpath.div.h1

Any keyword argument you pass will add a filter for an attribute with the name and value of the keyword:

# //div[@role="cell"]
xpath.div(role="cell")

Alternatively, use the by() method to specify attributes:

# //*[@class="main"]
xpath.by(_class="main")

An _ at the beginning of the attribute name will be removed, this is helpful for attributes that represents python keywords like "class" or "id":

# //div[@class="cell"][@id="myid"]
xpath.div(_class="cell", _id="myid")

If the value of an attribute starts with an asteric (*), the xpath matches any element that has the following text as a substring in this attribute

# //div[contains(@class, 'mycl')]
xpath.div(_class="*mycl")               

Alternatively, you can use the contains() function to filter for subtrings. the following statement is equal to the above:

# //div[contains(@class, 'mycl')]
xpath.div.contains(_class="mycl")

xpath supports "nested predicates", i.e. you can filter for specific sub-elements, while the xpath itself will point to the parent element (div in this example):

# //div[./span[@class='mycl']]
xpath.div.has(xpath.span(_class="mycl"))

Nested predicates are chainable:

# //div[./span[@class='mycl'][./p[text()="hello"]]]
xpath.div.has(xpath.span(_class="mycl")).has(xpath.p(text="hello"))

As you can see in the example above, a text attribute will be converted to "text()". In order to avoid this, use "_":

# //p[@text="hello"]]]
xpath.p(_text="hello"))

An "_" attrbute will be converted to ".":

# //p[contains(., "world")]
xpath.p(_="*world")

If the value of an attribute starts with a hashtag (#), the xpath matches any element that has the following text as a full word in this attribute:

# //div[contains(concat(' ', normalize-space(@class), ' '), ' myclass ')]
xpath.div(_class="#myclass")

Any combination of the features are allowed:

# //span[contains(@class, "mycl")][@placeholder="huhu"]
xpath.span(_class="*mycl", _placeholder='huhu')

An _ in the role will be converted to a ".":

# //Android.Container[@id="huhu"]
xp.Android_Container(_id="huhu")

Use double __ if you need an _:

# //Android_Container[@id="huhu"]
xp.Android__Container(_id="huhu")

Further reading

Metadata

Release files for yaxp 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yaxp 1.0.1
File Size Uploaded
yaxp-1.0.1.tar.gz 4.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yaxp 1.0.1
File Interpreter ABI Platform
yaxp-1.0.1-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 8.7 kB

Release files / yaxp-1.0.1.tar.gz

Download URL yaxp-1.0.1.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ba853b5dc949b10abff39937df78e78336e3d88ad8b2e3b240c30dbaf15f1559
BLAKE2b-256 checksum
How to use checksums
1154b89fa17863a86ea7fda19817ebca3344c11e9405d511b2f93d9ffabd24d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / yaxp-1.0.1-py2.py3-none-any.whl

Download URL yaxp-1.0.1-py2.py3-none-any.whl
Size 4.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
26d7ca70b57dd6aadc0f3a682902330ae6ffcf5c359365fe997b3c67287d9e72
BLAKE2b-256 checksum
How to use checksums
91e0bc515d0ddeb269cd859aae4a9b0aceb63d6df58da4ad907f499ec19db842
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.3.0

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page