scrapling 0.2.91__py3-none-any.whl → 0.2.93__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- scrapling/__init__.py +1 -1
- scrapling/cli.py +37 -0
- scrapling/core/_types.py +2 -1
- scrapling/core/custom_types.py +91 -39
- scrapling/core/translator.py +1 -1
- scrapling/defaults.py +8 -5
- scrapling/engines/camo.py +16 -14
- scrapling/engines/pw.py +11 -13
- scrapling/fetchers.py +5 -5
- scrapling/parser.py +155 -191
- {scrapling-0.2.91.dist-info → scrapling-0.2.93.dist-info}/METADATA +64 -71
- {scrapling-0.2.91.dist-info → scrapling-0.2.93.dist-info}/RECORD +18 -16
- {scrapling-0.2.91.dist-info → scrapling-0.2.93.dist-info}/WHEEL +1 -1
- scrapling-0.2.93.dist-info/entry_points.txt +2 -0
- tests/fetchers/async/test_playwright.py +1 -1
- tests/fetchers/sync/test_playwright.py +1 -1
- {scrapling-0.2.91.dist-info → scrapling-0.2.93.dist-info}/LICENSE +0 -0
- {scrapling-0.2.91.dist-info → scrapling-0.2.93.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.2
|
2
2
|
Name: scrapling
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.93
|
4
4
|
Summary: Scrapling is a powerful, flexible, and high-performance web scraping library for Python. It
|
5
5
|
Home-page: https://github.com/D4Vinci/Scrapling
|
6
6
|
Author: Karim Shoair
|
@@ -10,7 +10,7 @@ Project-URL: Documentation, https://github.com/D4Vinci/Scrapling/tree/main/docs
|
|
10
10
|
Project-URL: Source, https://github.com/D4Vinci/Scrapling
|
11
11
|
Project-URL: Tracker, https://github.com/D4Vinci/Scrapling/issues
|
12
12
|
Classifier: Operating System :: OS Independent
|
13
|
-
Classifier: Development Status :: 4 - Beta
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
14
14
|
Classifier: Intended Audience :: Developers
|
15
15
|
Classifier: License :: OSI Approved :: BSD License
|
16
16
|
Classifier: Natural Language :: English
|
@@ -31,16 +31,27 @@ Classifier: Typing :: Typed
|
|
31
31
|
Requires-Python: >=3.9
|
32
32
|
Description-Content-Type: text/markdown
|
33
33
|
License-File: LICENSE
|
34
|
-
Requires-Dist:
|
35
|
-
Requires-Dist: lxml>=4.5
|
34
|
+
Requires-Dist: lxml>=5.0
|
36
35
|
Requires-Dist: cssselect>=1.2
|
36
|
+
Requires-Dist: click
|
37
37
|
Requires-Dist: w3lib
|
38
38
|
Requires-Dist: orjson>=3
|
39
39
|
Requires-Dist: tldextract
|
40
40
|
Requires-Dist: httpx[brotli,socks,zstd]
|
41
41
|
Requires-Dist: playwright>=1.49.1
|
42
42
|
Requires-Dist: rebrowser-playwright>=1.49.1
|
43
|
-
Requires-Dist: camoufox[geoip]>=0.4.
|
43
|
+
Requires-Dist: camoufox[geoip]>=0.4.10
|
44
|
+
Dynamic: author
|
45
|
+
Dynamic: author-email
|
46
|
+
Dynamic: classifier
|
47
|
+
Dynamic: description
|
48
|
+
Dynamic: description-content-type
|
49
|
+
Dynamic: home-page
|
50
|
+
Dynamic: license
|
51
|
+
Dynamic: project-url
|
52
|
+
Dynamic: requires-dist
|
53
|
+
Dynamic: requires-python
|
54
|
+
Dynamic: summary
|
44
55
|
|
45
56
|
# 🕷️ Scrapling: Undetectable, Lightning-Fast, and Adaptive Web Scraping for Python
|
46
57
|
[](https://github.com/D4Vinci/Scrapling/actions/workflows/tests.yml) [](https://badge.fury.io/py/Scrapling) [](https://pypi.org/project/scrapling/) [](https://pepy.tech/project/scrapling)
|
@@ -77,6 +88,21 @@ Scrapling is a high-performance, intelligent web scraping library for Python tha
|
|
77
88
|
[](https://evomi.com?utm_source=github&utm_medium=banner&utm_campaign=d4vinci-scrapling)
|
78
89
|
---
|
79
90
|
|
91
|
+
[Scrapeless](https://www.scrapeless.com/?utm_source=github&utm_medium=ads&utm_campaign=scraping&utm_term=D4Vinci) is your all-in-one web scraping toolkit, starting at just $0.60 per 1k URLs!
|
92
|
+
|
93
|
+
- 🚀 Scraping API: Effortless and highly customizable data extraction with a single API call, providing structured data from any website.
|
94
|
+
- ⚡ Scraping Browser: AI-powered and LLM-driven, it simulates human-like behavior with genuine fingerprints and headless browser support, ensuring seamless, block-free scraping.
|
95
|
+
- 🔒 Web Unlocker: Bypass CAPTCHAs, IP blocks, and dynamic content in real time, ensuring uninterrupted access.
|
96
|
+
- 🌐 Proxies: Use high-quality, rotating proxies to scrape top platforms like Amazon, Shopee, and more, with global coverage in 195+ countries.
|
97
|
+
- 💼 Enterprise-Grade: Custom solutions for large-scale and complex data needs.
|
98
|
+
- 🎁 Free Trial: Try before you buy—experience our service firsthand.
|
99
|
+
- 💬 Pay-Per-Use: Flexible, cost-effective pricing with no long-term commitments.
|
100
|
+
- 🔧 Easy Integration: Seamlessly integrate with your existing tools and workflows for hassle-free automation.
|
101
|
+
|
102
|
+
|
103
|
+
[](https://www.scrapeless.com/?utm_source=github&utm_medium=ads&utm_campaign=scraping&utm_term=D4Vinci)
|
104
|
+
---
|
105
|
+
|
80
106
|
## Table of content
|
81
107
|
* [Key Features](#key-features)
|
82
108
|
* [Fetch websites as you prefer](#fetch-websites-as-you-prefer-with-async-support)
|
@@ -121,27 +147,27 @@ Scrapling is a high-performance, intelligent web scraping library for Python tha
|
|
121
147
|
## Key Features
|
122
148
|
|
123
149
|
### Fetch websites as you prefer with async support
|
124
|
-
- **HTTP
|
125
|
-
- **
|
126
|
-
- **
|
150
|
+
- **HTTP Requests**: Fast and stealthy HTTP requests with the `Fetcher` class.
|
151
|
+
- **Dynamic Loading & Automation**: Fetch dynamic websites with the `PlayWrightFetcher` class through your real browser, Scrapling's stealth mode, Playwright's Chrome browser, or [NSTbrowser](https://app.nstbrowser.io/r/1vO5e5)'s browserless!
|
152
|
+
- **Anti-bot Protections Bypass**: Easily bypass protections with `StealthyFetcher` and `PlayWrightFetcher` classes.
|
127
153
|
|
128
154
|
### Adaptive Scraping
|
129
|
-
- 🔄 **Smart Element Tracking**:
|
130
|
-
- 🎯 **Flexible
|
131
|
-
- 🔍 **Find Similar Elements**: Automatically locate elements similar to the element you
|
155
|
+
- 🔄 **Smart Element Tracking**: Relocate elements after website changes, using an intelligent similarity system and integrated storage.
|
156
|
+
- 🎯 **Flexible Selection**: CSS selectors, XPath selectors, filters-based search, text search, regex search and more.
|
157
|
+
- 🔍 **Find Similar Elements**: Automatically locate elements similar to the element you found!
|
132
158
|
- 🧠 **Smart Content Scraping**: Extract data from multiple websites without specific selectors using Scrapling powerful features.
|
133
159
|
|
134
|
-
### Performance
|
135
|
-
- 🚀 **Lightning Fast**: Built from the ground up with performance in mind, outperforming most popular Python scraping libraries
|
160
|
+
### High Performance
|
161
|
+
- 🚀 **Lightning Fast**: Built from the ground up with performance in mind, outperforming most popular Python scraping libraries.
|
136
162
|
- 🔋 **Memory Efficient**: Optimized data structures for minimal memory footprint.
|
137
|
-
- ⚡ **Fast JSON serialization**: 10x faster
|
163
|
+
- ⚡ **Fast JSON serialization**: 10x faster than standard library.
|
138
164
|
|
139
|
-
###
|
140
|
-
- 🛠️ **Powerful Navigation API**:
|
141
|
-
- 🧬 **Rich Text Processing**: All strings have built-in
|
142
|
-
- 📝 **
|
143
|
-
- 🔌 **API Similar to Scrapy/BeautifulSoup
|
144
|
-
- 📘 **Type hints
|
165
|
+
### Developer Friendly
|
166
|
+
- 🛠️ **Powerful Navigation API**: Easy DOM traversal in all directions.
|
167
|
+
- 🧬 **Rich Text Processing**: All strings have built-in regex, cleaning methods, and more. All elements' attributes are optimized dictionaries that takes less memory than standard dictionaries with added methods.
|
168
|
+
- 📝 **Auto Selectors Generation**: Generate robust short and full CSS/XPath selectors for any element.
|
169
|
+
- 🔌 **Familiar API**: Similar to Scrapy/BeautifulSoup and the same pseudo-elements used in Scrapy.
|
170
|
+
- 📘 **Type hints**: Complete type/doc-strings coverage for future-proofing and best autocompletion support.
|
145
171
|
|
146
172
|
## Getting Started
|
147
173
|
|
@@ -150,21 +176,22 @@ from scrapling import Fetcher
|
|
150
176
|
|
151
177
|
fetcher = Fetcher(auto_match=False)
|
152
178
|
|
153
|
-
#
|
179
|
+
# Do http GET request to a web page and create an Adaptor instance
|
154
180
|
page = fetcher.get('https://quotes.toscrape.com/', stealthy_headers=True)
|
155
|
-
# Get all
|
181
|
+
# Get all text content from all HTML tags in the page except `script` and `style` tags
|
156
182
|
page.get_all_text(ignore_tags=('script', 'style'))
|
157
183
|
|
158
|
-
# Get all quotes, any of these methods will return a list of strings (TextHandlers)
|
184
|
+
# Get all quotes elements, any of these methods will return a list of strings directly (TextHandlers)
|
159
185
|
quotes = page.css('.quote .text::text') # CSS selector
|
160
186
|
quotes = page.xpath('//span[@class="text"]/text()') # XPath
|
161
187
|
quotes = page.css('.quote').css('.text::text') # Chained selectors
|
162
188
|
quotes = [element.text for element in page.css('.quote .text')] # Slower than bulk query above
|
163
189
|
|
164
190
|
# Get the first quote element
|
165
|
-
quote = page.css_first('.quote') #
|
191
|
+
quote = page.css_first('.quote') # same as page.css('.quote').first or page.css('.quote')[0]
|
166
192
|
|
167
193
|
# Tired of selectors? Use find_all/find
|
194
|
+
# Get all 'div' HTML tags that one of its 'class' values is 'quote'
|
168
195
|
quotes = page.find_all('div', {'class': 'quote'})
|
169
196
|
# Same as
|
170
197
|
quotes = page.find_all('div', class_='quote')
|
@@ -172,10 +199,10 @@ quotes = page.find_all(['div'], class_='quote')
|
|
172
199
|
quotes = page.find_all(class_='quote') # and so on...
|
173
200
|
|
174
201
|
# Working with elements
|
175
|
-
quote.html_content # Inner HTML
|
176
|
-
quote.prettify() # Prettified version of Inner HTML
|
177
|
-
quote.attrib #
|
178
|
-
quote.path # DOM path to element (List)
|
202
|
+
quote.html_content # Get Inner HTML of this element
|
203
|
+
quote.prettify() # Prettified version of Inner HTML above
|
204
|
+
quote.attrib # Get that element's attributes
|
205
|
+
quote.path # DOM path to element (List of all ancestors from <html> tag till the element itself)
|
179
206
|
```
|
180
207
|
To keep it simple, all methods can be chained on top of each other!
|
181
208
|
|
@@ -211,52 +238,18 @@ Scrapling can find elements with more methods and it returns full element `Adapt
|
|
211
238
|
> All benchmarks' results are an average of 100 runs. See our [benchmarks.py](https://github.com/D4Vinci/Scrapling/blob/main/benchmarks.py) for methodology and to run your comparisons.
|
212
239
|
|
213
240
|
## Installation
|
214
|
-
Scrapling is a breeze to get started with
|
241
|
+
Scrapling is a breeze to get started with; Starting from version 0.2.9, we require at least Python 3.9 to work.
|
215
242
|
```bash
|
216
243
|
pip3 install scrapling
|
217
244
|
```
|
218
|
-
|
219
|
-
<details><summary>Windows OS</summary>
|
220
|
-
|
245
|
+
Then run this command to install browsers' dependencies needed to use Fetcher classes
|
221
246
|
```bash
|
222
|
-
|
223
|
-
```
|
224
|
-
</details>
|
225
|
-
<details><summary>MacOS</summary>
|
226
|
-
|
227
|
-
```bash
|
228
|
-
python3 -m camoufox fetch --browserforge
|
229
|
-
```
|
230
|
-
</details>
|
231
|
-
<details><summary>Linux</summary>
|
232
|
-
|
233
|
-
```bash
|
234
|
-
python -m camoufox fetch --browserforge
|
235
|
-
```
|
236
|
-
On a fresh installation of Linux, you may also need the following Firefox dependencies:
|
237
|
-
- Debian-based distros
|
238
|
-
```bash
|
239
|
-
sudo apt install -y libgtk-3-0 libx11-xcb1 libasound2
|
240
|
-
```
|
241
|
-
- Arch-based distros
|
242
|
-
```bash
|
243
|
-
sudo pacman -S gtk3 libx11 libxcb cairo libasound alsa-lib
|
244
|
-
```
|
245
|
-
</details>
|
246
|
-
|
247
|
-
<small> See the official <a href="https://camoufox.com/python/installation/#download-the-browser">Camoufox documentation</a> for more info on installation</small>
|
248
|
-
|
249
|
-
- If you are going to use the `PlayWrightFetcher` options, then install Playwright's Chromium browser with:
|
250
|
-
```commandline
|
251
|
-
playwright install chromium
|
252
|
-
```
|
253
|
-
- If you are going to use normal requests only with the `Fetcher` class then update the fingerprints files with:
|
254
|
-
```commandline
|
255
|
-
python -m browserforge update
|
247
|
+
scrapling install
|
256
248
|
```
|
249
|
+
If you have any installation issues, please open an issue.
|
257
250
|
|
258
251
|
## Fetching Websites
|
259
|
-
Fetchers are
|
252
|
+
Fetchers are interfaces built on top of other libraries with added features that do requests or fetch pages for you in a single request fashion and then return an `Adaptor` object. This feature was introduced because the only option we had before was to fetch the page as you wanted it, then pass it manually to the `Adaptor` class to create an `Adaptor` instance and start playing around with the page.
|
260
253
|
|
261
254
|
### Features
|
262
255
|
You might be slightly confused by now so let me clear things up. All fetcher-type classes are imported in the same way
|
@@ -325,7 +318,7 @@ True
|
|
325
318
|
| humanize | Humanize the cursor movement. Takes either True or the MAX duration in seconds of the cursor movement. The cursor typically takes up to 1.5 seconds to move across the window. | ✔️ |
|
326
319
|
| allow_webgl | Enabled by default. Disabling it WebGL not recommended as many WAFs now checks if WebGL is enabled. | ✔️ |
|
327
320
|
| geoip | Recommended to use with proxies; Automatically use IP's longitude, latitude, timezone, country, locale, & spoof the WebRTC IP address. It will also calculate and spoof the browser's language based on the distribution of language speakers in the target region. | ✔️ |
|
328
|
-
| disable_ads |
|
321
|
+
| disable_ads | Disabled by default, this installs `uBlock Origin` addon on the browser if enabled. | ✔️ |
|
329
322
|
| network_idle | Wait for the page until there are no network connections for at least 500 ms. | ✔️ |
|
330
323
|
| timeout | The timeout in milliseconds that is used in all operations and waits through the page. The default is 30000. | ✔️ |
|
331
324
|
| wait_selector | Wait for a specific css selector to be in a specific state. | ✔️ |
|
@@ -607,7 +600,7 @@ Inspired by BeautifulSoup's `find_all` function you can find elements by using `
|
|
607
600
|
* Any string passed is considered a tag name
|
608
601
|
* Any iterable passed like List/Tuple/Set is considered an iterable of tag names.
|
609
602
|
* Any dictionary is considered a mapping of HTML element(s) attribute names and attribute values.
|
610
|
-
* Any regex patterns passed are used as filters
|
603
|
+
* Any regex patterns passed are used as filters to elements by their text content
|
611
604
|
* Any functions passed are used as filters
|
612
605
|
* Any keyword argument passed is considered as an HTML element attribute with its value.
|
613
606
|
|
@@ -616,7 +609,7 @@ So the way it works is after collecting all passed arguments and keywords, each
|
|
616
609
|
|
617
610
|
1. All elements with the passed tag name(s).
|
618
611
|
2. All elements that match all passed attribute(s).
|
619
|
-
3. All elements that match all passed regex patterns.
|
612
|
+
3. All elements that its text content match all passed regex patterns.
|
620
613
|
4. All elements that fulfill all passed function(s).
|
621
614
|
|
622
615
|
Note: The filtering process always starts from the first filter it finds in the filtering order above so if no tag name(s) are passed but attributes are passed, the process starts from that layer and so on. **But the order in which you pass the arguments doesn't matter.**
|
@@ -1,19 +1,20 @@
|
|
1
|
-
scrapling/__init__.py,sha256=
|
2
|
-
scrapling/
|
3
|
-
scrapling/
|
4
|
-
scrapling/
|
1
|
+
scrapling/__init__.py,sha256=n6JuMbMMbuHmfxRNRsc-cPX6PrOXymXauvxpZSBwBD4,500
|
2
|
+
scrapling/cli.py,sha256=njPdJKmbLFHeWjtSiGEm9ALBdSyfUp0IaJvxQL5C31Q,1125
|
3
|
+
scrapling/defaults.py,sha256=sdXeZjXEX7PmCtaa0weK0nRrAUzqZukNNqipZ_sltYE,469
|
4
|
+
scrapling/fetchers.py,sha256=qmiJ6S-bnPWvP48Z6rKxBnSuR-tdwHlJwlIsYxGxFM0,35405
|
5
|
+
scrapling/parser.py,sha256=Y7Z3HBiEmL7FoKkUo7Pgdr89jI9XICS7oHeqKKU2Kug,54319
|
5
6
|
scrapling/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
6
7
|
scrapling/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
scrapling/core/_types.py,sha256=
|
8
|
-
scrapling/core/custom_types.py,sha256=
|
8
|
+
scrapling/core/_types.py,sha256=dKVi_dUxdxNtTr7sj7ySkHXDfrsmjFTfpCQeO5tGuBY,670
|
9
|
+
scrapling/core/custom_types.py,sha256=Hcfxs8ze4E1iR44dZCyiNSAhxrIygGbe8msNcNVdb_A,13399
|
9
10
|
scrapling/core/mixins.py,sha256=sozbpaGL1_O_x3U-ABM5aYWpnxpCLfdbcA9SG3P7weY,3532
|
10
11
|
scrapling/core/storage_adaptors.py,sha256=l_ZYcdn1y69AcoPuRrPoaxqKysN62pMExrwJWYdu5MA,6220
|
11
|
-
scrapling/core/translator.py,sha256=
|
12
|
+
scrapling/core/translator.py,sha256=hFSc3mxG5pYhbwRgingeFbD_E73U799vCsvVv0uFEXw,5237
|
12
13
|
scrapling/core/utils.py,sha256=03LzCDzmeK1TXPjIKVzHSUgSfhpe36XE8AwxlgxzJoU,3705
|
13
14
|
scrapling/engines/__init__.py,sha256=zA7tzqcDXP0hllwmjVewNHWipIA4JSU9mRG4J-cud0c,267
|
14
|
-
scrapling/engines/camo.py,sha256=
|
15
|
+
scrapling/engines/camo.py,sha256=udsKwax1vX4MPS9VChHLeSuzypCuFTvkehPJOVcR3eU,13824
|
15
16
|
scrapling/engines/constants.py,sha256=Gb_nXFoBB4ujJkd05SKkenMe1UDiRYQA3dkmA3DunLg,3723
|
16
|
-
scrapling/engines/pw.py,sha256=
|
17
|
+
scrapling/engines/pw.py,sha256=oJ3myCpbEUsxFRzFlItF9ktYXy-0a17gNpwzZj8Xhmk,18538
|
17
18
|
scrapling/engines/static.py,sha256=7SVEfeigCPfwC1ukx0zIFFe96Bo5fox6qOq2IWrP6P8,10319
|
18
19
|
scrapling/engines/toolbelt/__init__.py,sha256=VQDdYm1zY9Apno6d8UrULk29vUjllZrQqD8mXL1E2Fc,402
|
19
20
|
scrapling/engines/toolbelt/custom.py,sha256=d3qyeCg_qHm1RRE7yv5hyU9b17Y7YDPGBOVhEH1CAT0,12754
|
@@ -32,16 +33,17 @@ tests/fetchers/test_utils.py,sha256=ANFu-4FFhtyGFGIwJksUO2M2tTTcKU2M_t6F2aav8lM,
|
|
32
33
|
tests/fetchers/async/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
34
|
tests/fetchers/async/test_camoufox.py,sha256=BANJ0TVqEdsjkYlsyU-q_spfaMsqTLOBQU8LUDurL9I,3685
|
34
35
|
tests/fetchers/async/test_httpx.py,sha256=6WgsvqV1-rYTjZ9na5x-wt49C3Ur9D99HXBFbewO0gc,3888
|
35
|
-
tests/fetchers/async/test_playwright.py,sha256=
|
36
|
+
tests/fetchers/async/test_playwright.py,sha256=rr_3vB9LWclbl7PBNMH2MNU6CsirvJAIx_LsI9mLil0,4106
|
36
37
|
tests/fetchers/sync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
38
|
tests/fetchers/sync/test_camoufox.py,sha256=IcDXPAWSSJnYT6psDFKSbCeym5n7hCrMPYQEghaOX3A,3165
|
38
39
|
tests/fetchers/sync/test_httpx.py,sha256=xItYWjnDOIswKJzua2tDq8Oy43nTeFl0O1bci7lzGmg,3615
|
39
|
-
tests/fetchers/sync/test_playwright.py,sha256=
|
40
|
+
tests/fetchers/sync/test_playwright.py,sha256=MEyDRaMyxDIWupG7f_xz0f0jd9Cpbd5rXCPz6qUy8cs,3818
|
40
41
|
tests/parser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
42
|
tests/parser/test_automatch.py,sha256=SxsNdExE8zz8AcPRQFBUjZ3Q_1-tPOd9dzVvMSZpOYQ,4908
|
42
43
|
tests/parser/test_general.py,sha256=dyfOsc8lleoY4AxcfDUBUaD1i95xecfYuTUhKBsYjwo,12100
|
43
|
-
scrapling-0.2.
|
44
|
-
scrapling-0.2.
|
45
|
-
scrapling-0.2.
|
46
|
-
scrapling-0.2.
|
47
|
-
scrapling-0.2.
|
44
|
+
scrapling-0.2.93.dist-info/LICENSE,sha256=XHgu8DRuT7_g3Hb9Q18YGg8eShp6axPBacbnQxT_WWQ,1499
|
45
|
+
scrapling-0.2.93.dist-info/METADATA,sha256=cm3SQX_8l1tu_QNngh6CfnSrpWqhd8LoUuyVSm_hYH4,68867
|
46
|
+
scrapling-0.2.93.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
47
|
+
scrapling-0.2.93.dist-info/entry_points.txt,sha256=DHyt2Blxy0P5OE2HRcP95Wz9_xo2ERCDcNqrJjYS3o8,49
|
48
|
+
scrapling-0.2.93.dist-info/top_level.txt,sha256=ub7FkOEXeYmmYTUxd4pCrwXfBfAMIpZ1sCGmXCc14tI,16
|
49
|
+
scrapling-0.2.93.dist-info/RECORD,,
|
@@ -70,7 +70,7 @@ class TestPlayWrightFetcherAsync:
|
|
70
70
|
@pytest.mark.parametrize("kwargs", [
|
71
71
|
{"disable_webgl": True, "hide_canvas": False},
|
72
72
|
{"disable_webgl": False, "hide_canvas": True},
|
73
|
-
{"stealth": True},
|
73
|
+
# {"stealth": True}, # causes issues with Github Actions
|
74
74
|
{"useragent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0'},
|
75
75
|
{"extra_headers": {'ayo': ''}}
|
76
76
|
])
|
@@ -61,7 +61,7 @@ class TestPlayWrightFetcher:
|
|
61
61
|
@pytest.mark.parametrize("kwargs", [
|
62
62
|
{"disable_webgl": True, "hide_canvas": False},
|
63
63
|
{"disable_webgl": False, "hide_canvas": True},
|
64
|
-
{"stealth": True},
|
64
|
+
# {"stealth": True}, # causes issues with Github Actions
|
65
65
|
{"useragent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0'},
|
66
66
|
{"extra_headers": {'ayo': ''}}
|
67
67
|
])
|
File without changes
|
File without changes
|