Camoufox Scraper avatar

Camoufox Scraper

Try for free

No credit card required

Go to Store
Camoufox Scraper

Camoufox Scraper

josef.prochazka/camoufox-scraper
Try for free

No credit card required

Simple actor that uses Playwright with Camoufox to test if a specific website blocking mechanisms can be bypassed by using Camoufox.

You can access the Camoufox Scraper programmatically from your own applications by using the Apify API. You can choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.

1{
2  "openapi": "3.0.1",
3  "info": {
4    "version": "0.0",
5    "x-build-id": "Aoff5uhmjtmbQDENv"
6  },
7  "servers": [
8    {
9      "url": "https://api.apify.com/v2"
10    }
11  ],
12  "paths": {
13    "/acts/josef.prochazka~camoufox-scraper/run-sync-get-dataset-items": {
14      "post": {
15        "operationId": "run-sync-get-dataset-items-josef.prochazka-camoufox-scraper",
16        "x-openai-isConsequential": false,
17        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
18        "tags": [
19          "Run Actor"
20        ],
21        "requestBody": {
22          "required": true,
23          "content": {
24            "application/json": {
25              "schema": {
26                "$ref": "#/components/schemas/inputSchema"
27              }
28            }
29          }
30        },
31        "parameters": [
32          {
33            "name": "token",
34            "in": "query",
35            "required": true,
36            "schema": {
37              "type": "string"
38            },
39            "description": "Enter your Apify token here"
40          }
41        ],
42        "responses": {
43          "200": {
44            "description": "OK"
45          }
46        }
47      }
48    },
49    "/acts/josef.prochazka~camoufox-scraper/runs": {
50      "post": {
51        "operationId": "runs-sync-josef.prochazka-camoufox-scraper",
52        "x-openai-isConsequential": false,
53        "summary": "Executes an Actor and returns information about the initiated run in response.",
54        "tags": [
55          "Run Actor"
56        ],
57        "requestBody": {
58          "required": true,
59          "content": {
60            "application/json": {
61              "schema": {
62                "$ref": "#/components/schemas/inputSchema"
63              }
64            }
65          }
66        },
67        "parameters": [
68          {
69            "name": "token",
70            "in": "query",
71            "required": true,
72            "schema": {
73              "type": "string"
74            },
75            "description": "Enter your Apify token here"
76          }
77        ],
78        "responses": {
79          "200": {
80            "description": "OK",
81            "content": {
82              "application/json": {
83                "schema": {
84                  "$ref": "#/components/schemas/runsResponseSchema"
85                }
86              }
87            }
88          }
89        }
90      }
91    },
92    "/acts/josef.prochazka~camoufox-scraper/run-sync": {
93      "post": {
94        "operationId": "run-sync-josef.prochazka-camoufox-scraper",
95        "x-openai-isConsequential": false,
96        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
97        "tags": [
98          "Run Actor"
99        ],
100        "requestBody": {
101          "required": true,
102          "content": {
103            "application/json": {
104              "schema": {
105                "$ref": "#/components/schemas/inputSchema"
106              }
107            }
108          }
109        },
110        "parameters": [
111          {
112            "name": "token",
113            "in": "query",
114            "required": true,
115            "schema": {
116              "type": "string"
117            },
118            "description": "Enter your Apify token here"
119          }
120        ],
121        "responses": {
122          "200": {
123            "description": "OK"
124          }
125        }
126      }
127    }
128  },
129  "components": {
130    "schemas": {
131      "inputSchema": {
132        "type": "object",
133        "required": [
134          "startUrls",
135          "pageFunction",
136          "proxyConfiguration"
137        ],
138        "properties": {
139          "startUrls": {
140            "title": "Start URLs",
141            "type": "array",
142            "description": "A static list of URLs to scrape.",
143            "items": {
144              "type": "object",
145              "required": [
146                "url"
147              ],
148              "properties": {
149                "url": {
150                  "type": "string",
151                  "title": "URL of a web page",
152                  "format": "uri"
153                }
154              }
155            }
156          },
157          "maxCrawlingDepth": {
158            "title": "Max crawling depth",
159            "minimum": 0,
160            "type": "integer",
161            "description": "Specifies how many links away from the <b>Start URLs</b> the scraper will descend. Note that pages added using <code>context.request_queue</code> in <b>Page function</b> are not subject to the maximum depth constraint.",
162            "default": 1
163          },
164          "maxRequestsPerCrawl": {
165            "title": "Max requests per crawl",
166            "minimum": 1,
167            "type": "integer",
168            "description": "Crawler will stop after processing this amount of requests.",
169            "default": 1
170          },
171          "requestTimeout": {
172            "title": "Request timeout",
173            "minimum": 0,
174            "type": "integer",
175            "description": "The maximum duration (in seconds) for the request to complete before timing out. The timeout value is passed to the <code>httpx.AsyncClient</code> object.",
176            "default": 30
177          },
178          "linkSelector": {
179            "title": "Link selector",
180            "type": "string",
181            "description": "A CSS selector stating which links on the page (<code>&lt;a&gt;</code> elements with <code>href</code> attribute) shall be followed and added to the request queue. To filter the links added to the queue, use the <b>Link patterns</b> field.<br><br>If the <b>Link selector</b> is empty, the page links are ignored. Of course, you can work with the page links and the request queue in the <b>Page function</b> as well."
182          },
183          "linkPatterns": {
184            "title": "Link patterns",
185            "type": "array",
186            "description": "Link patterns (regular expressions) to match links in the page that you want to enqueue. Combine with <b>Link selector</b> to tell the scraper where to find links. Omitting the link patterns will cause the scraper to enqueue all links matched by the Link selector.",
187            "items": {
188              "type": "string"
189            }
190          },
191          "pageFunction": {
192            "title": "Page function",
193            "type": "string",
194            "description": "A Python function, that is executed for every page. Use it to scrape data from the page, perform actions or add new URLs to the request queue. The page function has its own naming scope and you can import any installed modules. Typically you would want to obtain the data from the <code>context.soup</code> object and return them. Identifier <code>page_function</code> can't be changed. For more information about the <code>context</code> object you get into the <code>page_function</code> check the <a href='https://github.com/apify/actor-beautifulsoup-scraper#context' target='_blank' rel='noopener'>github.com/apify/actor-beautifulsoup-scraper#context</a>. Asynchronous functions are supported."
195          },
196          "proxyConfiguration": {
197            "title": "Proxy configuration",
198            "type": "object",
199            "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.",
200            "default": {
201              "useApifyProxy": true
202            }
203          }
204        }
205      },
206      "runsResponseSchema": {
207        "type": "object",
208        "properties": {
209          "data": {
210            "type": "object",
211            "properties": {
212              "id": {
213                "type": "string"
214              },
215              "actId": {
216                "type": "string"
217              },
218              "userId": {
219                "type": "string"
220              },
221              "startedAt": {
222                "type": "string",
223                "format": "date-time",
224                "example": "2025-01-08T00:00:00.000Z"
225              },
226              "finishedAt": {
227                "type": "string",
228                "format": "date-time",
229                "example": "2025-01-08T00:00:00.000Z"
230              },
231              "status": {
232                "type": "string",
233                "example": "READY"
234              },
235              "meta": {
236                "type": "object",
237                "properties": {
238                  "origin": {
239                    "type": "string",
240                    "example": "API"
241                  },
242                  "userAgent": {
243                    "type": "string"
244                  }
245                }
246              },
247              "stats": {
248                "type": "object",
249                "properties": {
250                  "inputBodyLen": {
251                    "type": "integer",
252                    "example": 2000
253                  },
254                  "rebootCount": {
255                    "type": "integer",
256                    "example": 0
257                  },
258                  "restartCount": {
259                    "type": "integer",
260                    "example": 0
261                  },
262                  "resurrectCount": {
263                    "type": "integer",
264                    "example": 0
265                  },
266                  "computeUnits": {
267                    "type": "integer",
268                    "example": 0
269                  }
270                }
271              },
272              "options": {
273                "type": "object",
274                "properties": {
275                  "build": {
276                    "type": "string",
277                    "example": "latest"
278                  },
279                  "timeoutSecs": {
280                    "type": "integer",
281                    "example": 300
282                  },
283                  "memoryMbytes": {
284                    "type": "integer",
285                    "example": 1024
286                  },
287                  "diskMbytes": {
288                    "type": "integer",
289                    "example": 2048
290                  }
291                }
292              },
293              "buildId": {
294                "type": "string"
295              },
296              "defaultKeyValueStoreId": {
297                "type": "string"
298              },
299              "defaultDatasetId": {
300                "type": "string"
301              },
302              "defaultRequestQueueId": {
303                "type": "string"
304              },
305              "buildNumber": {
306                "type": "string",
307                "example": "1.0.0"
308              },
309              "containerUrl": {
310                "type": "string"
311              },
312              "usage": {
313                "type": "object",
314                "properties": {
315                  "ACTOR_COMPUTE_UNITS": {
316                    "type": "integer",
317                    "example": 0
318                  },
319                  "DATASET_READS": {
320                    "type": "integer",
321                    "example": 0
322                  },
323                  "DATASET_WRITES": {
324                    "type": "integer",
325                    "example": 0
326                  },
327                  "KEY_VALUE_STORE_READS": {
328                    "type": "integer",
329                    "example": 0
330                  },
331                  "KEY_VALUE_STORE_WRITES": {
332                    "type": "integer",
333                    "example": 1
334                  },
335                  "KEY_VALUE_STORE_LISTS": {
336                    "type": "integer",
337                    "example": 0
338                  },
339                  "REQUEST_QUEUE_READS": {
340                    "type": "integer",
341                    "example": 0
342                  },
343                  "REQUEST_QUEUE_WRITES": {
344                    "type": "integer",
345                    "example": 0
346                  },
347                  "DATA_TRANSFER_INTERNAL_GBYTES": {
348                    "type": "integer",
349                    "example": 0
350                  },
351                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
352                    "type": "integer",
353                    "example": 0
354                  },
355                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
356                    "type": "integer",
357                    "example": 0
358                  },
359                  "PROXY_SERPS": {
360                    "type": "integer",
361                    "example": 0
362                  }
363                }
364              },
365              "usageTotalUsd": {
366                "type": "number",
367                "example": 0.00005
368              },
369              "usageUsd": {
370                "type": "object",
371                "properties": {
372                  "ACTOR_COMPUTE_UNITS": {
373                    "type": "integer",
374                    "example": 0
375                  },
376                  "DATASET_READS": {
377                    "type": "integer",
378                    "example": 0
379                  },
380                  "DATASET_WRITES": {
381                    "type": "integer",
382                    "example": 0
383                  },
384                  "KEY_VALUE_STORE_READS": {
385                    "type": "integer",
386                    "example": 0
387                  },
388                  "KEY_VALUE_STORE_WRITES": {
389                    "type": "number",
390                    "example": 0.00005
391                  },
392                  "KEY_VALUE_STORE_LISTS": {
393                    "type": "integer",
394                    "example": 0
395                  },
396                  "REQUEST_QUEUE_READS": {
397                    "type": "integer",
398                    "example": 0
399                  },
400                  "REQUEST_QUEUE_WRITES": {
401                    "type": "integer",
402                    "example": 0
403                  },
404                  "DATA_TRANSFER_INTERNAL_GBYTES": {
405                    "type": "integer",
406                    "example": 0
407                  },
408                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
409                    "type": "integer",
410                    "example": 0
411                  },
412                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
413                    "type": "integer",
414                    "example": 0
415                  },
416                  "PROXY_SERPS": {
417                    "type": "integer",
418                    "example": 0
419                  }
420                }
421              }
422            }
423          }
424        }
425      }
426    }
427  }
428}

Camoufox Scraper OpenAPI definition

OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.

OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.

By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.

You can download the OpenAPI definitions for Camoufox Scraper from the options below:

If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.

You can also check out our other API clients:

Developer
Maintained by Community

Actor Metrics

  • 1 monthly user

  • 0 No stars yet

  • >99% runs succeeded

  • Created in Feb 2025

  • Modified a day ago