@ -12,11 +12,14 @@ Know when important content changes, we support notifications via Discord, Teleg
[**Don't have time? Let us host it for you! try our $6.99/month subscription - use our proxies and support!**](https://lemonade.changedetection.io/start) , _half the price of other website change monitoring services and comes with unlimited watches & checks!_
[**Don't have time? Let us host it for you! try our $6.99/month subscription - use our proxies and support!**](https://lemonade.changedetection.io/start) , _half the price of other website change monitoring services and comes with unlimited watches & checks!_
- Chrome browser included.
- Super fast, no registration needed setup.
- Start watching and receiving change notifications instantly.
- Automatic Updates, Automatic Backups, No Heroku "paused application", don't miss a change!
Easily see what changed, examine by word, line, or individual character.
- Javascript browser included
- Unlimited checks and watches!
<imgsrc="https://raw.githubusercontent.com/dgtlmoon/changedetection.io/master/docs/screenshot-diff.png"style="max-width:100%;"alt="Self-hosted web page change monitoring context difference "title="Self-hosted web page change monitoring context difference "/>
#### Example use cases
#### Example use cases
@ -44,22 +47,18 @@ _Need an actual Chrome runner with Javascript support? We support fetching via W
#### Key Features
#### Key Features
- Lots of trigger filters, such as "Trigger on text", "Remove text by selector", "Ignore text", "Extract text", also using regular-expressions!
- Lots of trigger filters, such as "Trigger on text", "Remove text by selector", "Ignore text", "Extract text", also using regular-expressions!
- Target elements with xPath and CSS Selectors, Easily monitor complex JSON with JsonPath rules
- Target elements with xPath and CSS Selectors, Easily monitor complex JSON with JSONPath or jq
- Switch between fast non-JS and Chrome JS based "fetchers"
- Switch between fast non-JS and Chrome JS based "fetchers"
- Easily specify how often a site should be checked
- Easily specify how often a site should be checked
- Execute JS before extracting text (Good for logging in, see examples in the UI!)
- Execute JS before extracting text (Good for logging in, see examples in the UI!)
- Override Request Headers, Specify `POST` or `GET` and other methods
- Override Request Headers, Specify `POST` or `GET` and other methods
- Use the "Visual Selector" to help target specific elements
- Use the "Visual Selector" to help target specific elements
- Configurable [proxy per watch](https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration)
We [recommend and use Bright Data](https://brightdata.grsm.io/n0r16zf7eivq) global proxy services, Bright Data will match any first deposit up to $100 using our signup link.
## Screenshots
## Screenshots
### Examine differences in content.
Easily see what changed, examine by word, line, or individual character.
<imgsrc="https://raw.githubusercontent.com/dgtlmoon/changedetection.io/master/docs/screenshot-diff.png"style="max-width:100%;"alt="Self-hosted web page change monitoring context difference "title="Self-hosted web page change monitoring context difference "/>
Please :star: star :star: this project and help it grow! https://github.com/dgtlmoon/changedetection.io/
Please :star: star :star: this project and help it grow! https://github.com/dgtlmoon/changedetection.io/
### Filter by elements using the Visual Selector tool.
### Filter by elements using the Visual Selector tool.
@ -122,7 +121,7 @@ See the wiki for more information https://github.com/dgtlmoon/changedetection.io
## Filters
## Filters
XPath, JSONPath and CSS support comes baked in! You can be as specific as you need, use XPath exported from various XPath element query creation tools.
XPath, JSONPath, jq, and CSS support comes baked in! You can be as specific as you need, use XPath exported from various XPath element query creation tools.
(We support LXML `re:test`, `re:math` and `re:replace`.)
(We support LXML `re:test`, `re:math` and `re:replace`.)
@ -152,7 +151,7 @@ Now you can also customise your notification content!
## JSON API Monitoring
## JSON API Monitoring
Detect changes and monitor data in JSON API's by using the built-in JSONPath selectors as a filter / selector.
Detect changes and monitor data in JSON API's by using either JSONPath or jq to filter, parse, and restructure JSON as needed.
For more complex parsing, filtering, and modifying of JSON data, jq is recommended due to the built-in operators and functions. Refer to the [documentation](https://stedolan.github.io/jq/manual/) for more information on jq.
The example below adds the price in dollars to each item in the JSON data, and then filters to only show items that are greater than 10.
When you enable a `json:` filter, you can even automatically extract and parse embedded JSON inside a HTML page! Amazingly handy for sites that build content based on JSON, such as many e-commerce websites.
When you enable a `json:`or `jq:`filter, you can even automatically extract and parse embedded JSON inside a HTML page! Amazingly handy for sites that build content based on JSON, such as many e-commerce websites.
```
```
<html>
<html>
@ -172,7 +214,7 @@ When you enable a `json:` filter, you can even automatically extract and parse e
</script>
</script>
```
```
`json:$.price` would give `23.50`, or you can extract the whole structure
`json:$.price`or `jq:.price`would give `23.50`, or you can extract the whole structure
extract_title_as_title=BooleanField('Extract <title> from document and use as watch title',default=False)
extract_title_as_title=BooleanField('Extract <title> from document and use as watch title',default=False)
webdriver_delay=IntegerField('Wait seconds before extracting text',validators=[validators.Optional(),validators.NumberRange(min=1,message="Should contain one or more seconds")])
webdriver_delay=IntegerField('Wait seconds before extracting text',validators=[validators.Optional(),validators.NumberRange(min=1,
'User-Agent':getenv("DEFAULT_SETTINGS_HEADERS_USERAGENT",'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'),
<p>Use the <strong>Basic</strong> method (default) where your watched site doesn't need Javascript to render.</p>
<p>Use the <strong>Basic</strong> method (default) where your watched site doesn't need Javascript to render.</p>
<p>The <strong>Chrome/Javascript</strong> method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'. </p>
<p>The <strong>Chrome/Javascript</strong> method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'. </p>
Tip: <ahref="https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#brightdata-proxy-support">Connect using BrightData Proxies, find out more here.</a>
</span>
</span>
</div>
</div>
{% if form.proxy %}
{% if form.proxy %}
@ -146,6 +147,8 @@ User-Agent: wonderbra 1.0") }}
There are <ahref="{{ url_for('settings_page')}}#notifications">system-wide notification URLs enabled</a>, this form will override notification settings for this watch only ‐ an empty Notification URL list here will still send notifications.
There are <ahref="{{ url_for('settings_page')}}#notifications">system-wide notification URLs enabled</a>, this form will override notification settings for this watch only ‐ an empty Notification URL list here will still send notifications.
<li>CSS - Limit text to this CSS rule, only text matching this CSS rule is included.</li>
<li>CSS - Limit text to this CSS rule, only text matching this CSS rule is included.</li>
<li>JSON - Limit text to this JSON rule, using <ahref="https://pypi.org/project/jsonpath-ng/">JSONPath</a>, prefix with <code>"json:"</code>, use <code>json:$</code> to force re-formatting if required, <a
<li>JSON - Limit text to this JSON rule, using either <ahref="https://pypi.org/project/jsonpath-ng/"target="new">JSONPath</a> or <ahref="https://stedolan.github.io/jq/"target="new">jq</a>.
href="https://jsonpath.com/" target="new">test your JSONPath here</a></li>
<ul>
<li>JSONPath: Prefix with <code>json:</code>, use <code>json:$</code> to force re-formatting if required, <ahref="https://jsonpath.com/"target="new">test your JSONPath here</a>.</li>
<li>jq: Prefix with <code>jq:</code> and <ahref="https://jqplay.org/"target="new">test your jq here</a>. Using <ahref="https://stedolan.github.io/jq/"target="new">jq</a> allows for complex filtering and processing of JSON data with built-in functions, regex, filtering, and more. See examples and documentation <ahref="https://stedolan.github.io/jq/manual/"target="new">here</a>.</li>
</ul>
</li>
<li>XPath - Limit text to this XPath rule, simply start with a forward-slash,
<li>XPath - Limit text to this XPath rule, simply start with a forward-slash,
<ul>
<ul>
<li>Example: <code>//*[contains(@class, 'sametext')]</code> or <code>xpath://*[contains(@class, 'sametext')]</code>, <a
<li>Example: <code>//*[contains(@class, 'sametext')]</code> or <code>xpath://*[contains(@class, 'sametext')]</code>, <a
@ -201,7 +208,7 @@ User-Agent: wonderbra 1.0") }}
</ul>
</ul>
</li>
</li>
</ul>
</ul>
Please be sure that you thoroughly understand how to write CSS or JSONPath, XPath selector rules before filing an issue on GitHub! <a
Please be sure that you thoroughly understand how to write CSS, JSONPath, XPath, or jq selector rules before filing an issue on GitHub! <a
href="https://github.com/dgtlmoon/changedetection.io/wiki/CSS-Selector-help">here for more CSS selector help</a>.<br/>
href="https://github.com/dgtlmoon/changedetection.io/wiki/CSS-Selector-help">here for more CSS selector help</a>.<br/>
<p>Use the <strong>Basic</strong> method (default) where your watched sites don't need Javascript to render.</p>
<p>Use the <strong>Basic</strong> method (default) where your watched sites don't need Javascript to render.</p>
<p>The <strong>Chrome/Javascript</strong> method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'. </p>
<p>The <strong>Chrome/Javascript</strong> method requires a network connection to a running WebDriver+Chrome server, set by the ENV var 'WEBDRIVER_URL'. </p>
</span>
</span>
<br/>
Tip: <ahref="https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#brightdata-proxy-support">Connect using BrightData Proxies, find out more here.</a>