Spaces:
Build error
Build error
Commit ·
04f322e
1
Parent(s): 516c523
fix: run headful
Browse files- README.md +8 -0
- app/util/visa_availability_scraper_playwright.py +72 -31
- constant.py +203 -0
- server.py +20 -20
- visa_avaibility_playwright_20251015.csv +397 -0
README.md
CHANGED
|
@@ -8,3 +8,11 @@ pinned: false
|
|
| 8 |
---
|
| 9 |
|
| 10 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
| 11 |
+
|
| 12 |
+
---
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
### HOW TO RUN VISA CHECKER
|
| 16 |
+
```bash
|
| 17 |
+
python -m app.util.visa_availability_scraper_playwright
|
| 18 |
+
```
|
app/util/visa_availability_scraper_playwright.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import asyncio
|
| 2 |
-
import
|
| 3 |
from typing import Dict, Optional, List
|
|
|
|
| 4 |
from playwright.async_api import async_playwright
|
| 5 |
|
| 6 |
class PassportIndexVisaScraper:
|
|
@@ -23,7 +24,7 @@ class PassportIndexVisaScraper:
|
|
| 23 |
self.playwright = await async_playwright().start()
|
| 24 |
|
| 25 |
self.browser = await self.playwright.chromium.launch(
|
| 26 |
-
headless=
|
| 27 |
args=[
|
| 28 |
'--disable-blink-features=AutomationControlled',
|
| 29 |
'--disable-dev-shm-usage',
|
|
@@ -183,6 +184,7 @@ class PassportIndexVisaScraper:
|
|
| 183 |
print(f"✅ Got result: {result}")
|
| 184 |
return result
|
| 185 |
elif result and 'error' in result:
|
|
|
|
| 186 |
print(f"❌ API Error: {result['error']}")
|
| 187 |
return None
|
| 188 |
else:
|
|
@@ -206,7 +208,7 @@ class PassportIndexVisaScraper:
|
|
| 206 |
|
| 207 |
# Find and click the country in the list
|
| 208 |
passport_selector = f'.vch-passports .s-div[data-ccode="{passport_country.lower()}"]'
|
| 209 |
-
await self.page.wait_for_selector(passport_selector, timeout=
|
| 210 |
await self.page.click(passport_selector)
|
| 211 |
await self.page.wait_for_timeout(500)
|
| 212 |
|
|
@@ -244,7 +246,45 @@ class PassportIndexVisaScraper:
|
|
| 244 |
if self.debug:
|
| 245 |
print(f"❌ Interactive method failed: {e}")
|
| 246 |
return None
|
| 247 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
async def check_multiple_destinations(self, passport_country: str, destinations: List[str], delay: float = 2.0) -> Dict:
|
| 249 |
"""
|
| 250 |
Check visa requirements for multiple destinations
|
|
@@ -297,45 +337,46 @@ class PassportIndexVisaScraper:
|
|
| 297 |
|
| 298 |
|
| 299 |
async def main():
|
| 300 |
-
"""Main function to demonstrate usage"""
|
| 301 |
print("="*60)
|
| 302 |
print(" Passport Index Visa Checker (Playwright)")
|
| 303 |
print("="*60)
|
| 304 |
|
| 305 |
async with PassportIndexVisaScraper(debug=True) as scraper:
|
| 306 |
-
|
| 307 |
if not await scraper.initialize_session():
|
| 308 |
print("❌ Failed to initialize session")
|
| 309 |
return
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
print(" Testing visa requirements...")
|
| 313 |
-
print("="*60)
|
| 314 |
-
|
| 315 |
-
# Test single visa requirement
|
| 316 |
-
print("\n📍 Single visa check: US → GB")
|
| 317 |
-
print("-" * 40)
|
| 318 |
-
result = await scraper.check_visa_requirement_browser('us', 'gb')
|
| 319 |
-
if result:
|
| 320 |
-
print(f"Result: {scraper.format_result(result)}")
|
| 321 |
-
else:
|
| 322 |
-
print("Trying interactive method...")
|
| 323 |
-
result = await scraper.check_visa_interactive('us', 'gb')
|
| 324 |
-
if result:
|
| 325 |
-
print(f"Result: {scraper.format_result(result)}")
|
| 326 |
-
|
| 327 |
-
# Test multiple destinations
|
| 328 |
-
print("\n📍 Multiple destinations for US passport:")
|
| 329 |
-
print("-" * 40)
|
| 330 |
-
destinations = ['ca', 'mx', 'jp', 'au'] # Canada, Mexico, Japan, Australia
|
| 331 |
-
results = await scraper.check_multiple_destinations('us', destinations, delay=2.0)
|
| 332 |
-
|
| 333 |
-
print("\n📊 Summary:")
|
| 334 |
for dest, result in results.items():
|
| 335 |
if result:
|
| 336 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
else:
|
| 338 |
print(f" ❌ US → {dest.upper()}: Failed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 339 |
|
| 340 |
if __name__ == "__main__":
|
| 341 |
asyncio.run(main())
|
|
|
|
| 1 |
import asyncio
|
| 2 |
+
import pandas as pd
|
| 3 |
from typing import Dict, Optional, List
|
| 4 |
+
from constant import COUNTRY_CODES, REVERSE_COUNTRY_CODES
|
| 5 |
from playwright.async_api import async_playwright
|
| 6 |
|
| 7 |
class PassportIndexVisaScraper:
|
|
|
|
| 24 |
self.playwright = await async_playwright().start()
|
| 25 |
|
| 26 |
self.browser = await self.playwright.chromium.launch(
|
| 27 |
+
headless=False, # Using headless mode
|
| 28 |
args=[
|
| 29 |
'--disable-blink-features=AutomationControlled',
|
| 30 |
'--disable-dev-shm-usage',
|
|
|
|
| 184 |
print(f"✅ Got result: {result}")
|
| 185 |
return result
|
| 186 |
elif result and 'error' in result:
|
| 187 |
+
print(result)
|
| 188 |
print(f"❌ API Error: {result['error']}")
|
| 189 |
return None
|
| 190 |
else:
|
|
|
|
| 208 |
|
| 209 |
# Find and click the country in the list
|
| 210 |
passport_selector = f'.vch-passports .s-div[data-ccode="{passport_country.lower()}"]'
|
| 211 |
+
await self.page.wait_for_selector(passport_selector, timeout=3000)
|
| 212 |
await self.page.click(passport_selector)
|
| 213 |
await self.page.wait_for_timeout(500)
|
| 214 |
|
|
|
|
| 246 |
if self.debug:
|
| 247 |
print(f"❌ Interactive method failed: {e}")
|
| 248 |
return None
|
| 249 |
+
async def check_multiple_source(self, passport_countries: List[str], destination: str, delay: float = 2.0) -> Dict:
|
| 250 |
+
"""
|
| 251 |
+
Check visa requirements for multiple passport countries to a single destination.
|
| 252 |
+
|
| 253 |
+
Args:
|
| 254 |
+
passport_countries: List of two-letter country codes for passports.
|
| 255 |
+
destination: Two-letter country code for the destination.
|
| 256 |
+
delay: Delay between requests in seconds.
|
| 257 |
+
|
| 258 |
+
Returns:
|
| 259 |
+
Dictionary mapping passport country codes to visa information.
|
| 260 |
+
"""
|
| 261 |
+
results = {}
|
| 262 |
+
|
| 263 |
+
for i, passport in enumerate(passport_countries, 1):
|
| 264 |
+
print(f"\n[{i}/{len(passport_countries)}] Checking {passport.upper()} → {destination.upper()}...")
|
| 265 |
+
|
| 266 |
+
# Try API method first
|
| 267 |
+
result = await self.check_visa_requirement_browser(passport, destination)
|
| 268 |
+
|
| 269 |
+
# If API fails, try interactive method
|
| 270 |
+
if not result:
|
| 271 |
+
result = await self.check_visa_interactive(passport, destination)
|
| 272 |
+
|
| 273 |
+
if result:
|
| 274 |
+
results[passport] = result
|
| 275 |
+
text = result.get('text', 'No text available')
|
| 276 |
+
print(f" ✅ Result: {text}")
|
| 277 |
+
else:
|
| 278 |
+
results[passport] = None
|
| 279 |
+
print(f" ❌ Failed to get result")
|
| 280 |
+
|
| 281 |
+
# Rate limiting to avoid blocking
|
| 282 |
+
if i < len(passport_countries):
|
| 283 |
+
print(f" ⏳ Waiting {delay} seconds...")
|
| 284 |
+
await asyncio.sleep(delay)
|
| 285 |
+
|
| 286 |
+
return results
|
| 287 |
+
|
| 288 |
async def check_multiple_destinations(self, passport_country: str, destinations: List[str], delay: float = 2.0) -> Dict:
|
| 289 |
"""
|
| 290 |
Check visa requirements for multiple destinations
|
|
|
|
| 337 |
|
| 338 |
|
| 339 |
async def main():
|
|
|
|
| 340 |
print("="*60)
|
| 341 |
print(" Passport Index Visa Checker (Playwright)")
|
| 342 |
print("="*60)
|
| 343 |
|
| 344 |
async with PassportIndexVisaScraper(debug=True) as scraper:
|
| 345 |
+
l = []
|
| 346 |
if not await scraper.initialize_session():
|
| 347 |
print("❌ Failed to initialize session")
|
| 348 |
return
|
| 349 |
+
destinations = list(COUNTRY_CODES.values())
|
| 350 |
+
results = await scraper.check_multiple_destinations('id', destinations, delay=2.0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 351 |
for dest, result in results.items():
|
| 352 |
if result:
|
| 353 |
+
dic = {}
|
| 354 |
+
dic['text'] = result.get('text', 'N/A')
|
| 355 |
+
dic['days'] = result.get('days', 'N/A')
|
| 356 |
+
dic['pass'] = result.get('pass', 'N/A')
|
| 357 |
+
dic['dest'] = REVERSE_COUNTRY_CODES[dest]
|
| 358 |
+
dic['source'] = 'Indonesia'
|
| 359 |
+
l.append(dic)
|
| 360 |
+
print(f"ID -> {dest.upper()}: {result.get('text', 'N/A')}")
|
| 361 |
else:
|
| 362 |
print(f" ❌ US → {dest.upper()}: Failed")
|
| 363 |
+
results = await scraper.check_multiple_source(destinations, 'id', delay=2.0)
|
| 364 |
+
for passport, result in results.items():
|
| 365 |
+
if result:
|
| 366 |
+
dic = {}
|
| 367 |
+
dic['text'] = result.get('text', 'N/A')
|
| 368 |
+
dic['days'] = result.get('days', 'N/A')
|
| 369 |
+
dic['pass'] = result.get('pass', 'N/A')
|
| 370 |
+
dic['dest'] = REVERSE_COUNTRY_CODES['id']
|
| 371 |
+
dic['source'] = REVERSE_COUNTRY_CODES[passport]
|
| 372 |
+
l.append(dic)
|
| 373 |
+
print(f"{passport.upper()} -> ID: {result.get('text', 'N/A')}")
|
| 374 |
+
else:
|
| 375 |
+
print(f" ❌ {passport.upper()} → ID: Failed")
|
| 376 |
+
|
| 377 |
+
# save to csv
|
| 378 |
+
df = pd.DataFrame(l)
|
| 379 |
+
df.to_csv('visa_avaibility_playwright.csv', index=False)
|
| 380 |
|
| 381 |
if __name__ == "__main__":
|
| 382 |
asyncio.run(main())
|
constant.py
CHANGED
|
@@ -205,4 +205,207 @@ COUNTRY_CODES = {
|
|
| 205 |
'Yemen': 'ye',
|
| 206 |
'Zambia': 'zm',
|
| 207 |
'Zimbabwe': 'zw'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
}
|
|
|
|
| 205 |
'Yemen': 'ye',
|
| 206 |
'Zambia': 'zm',
|
| 207 |
'Zimbabwe': 'zw'
|
| 208 |
+
}
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
REVERSE_COUNTRY_CODES = {
|
| 212 |
+
"af": "Afghanistan",
|
| 213 |
+
"al": "Albania",
|
| 214 |
+
"dz": "Algeria",
|
| 215 |
+
"ad": "Andorra",
|
| 216 |
+
"ao": "Angola",
|
| 217 |
+
"ag": "Antigua and Barbuda",
|
| 218 |
+
"ar": "Argentina",
|
| 219 |
+
"am": "Armenia",
|
| 220 |
+
"au": "Australia",
|
| 221 |
+
"at": "Austria",
|
| 222 |
+
"az": "Azerbaijan",
|
| 223 |
+
"bs": "Bahamas",
|
| 224 |
+
"bh": "Bahrain",
|
| 225 |
+
"bd": "Bangladesh",
|
| 226 |
+
"bb": "Barbados",
|
| 227 |
+
"by": "Belarus",
|
| 228 |
+
"be": "Belgium",
|
| 229 |
+
"bz": "Belize",
|
| 230 |
+
"bj": "Benin",
|
| 231 |
+
"bt": "Bhutan",
|
| 232 |
+
"bo": "Bolivia",
|
| 233 |
+
"ba": "Bosnia and Herzegovina",
|
| 234 |
+
"bw": "Botswana",
|
| 235 |
+
"br": "Brazil",
|
| 236 |
+
"bn": "Brunei",
|
| 237 |
+
"bg": "Bulgaria",
|
| 238 |
+
"bf": "Burkina Faso",
|
| 239 |
+
"bi": "Burundi",
|
| 240 |
+
"kh": "Cambodia",
|
| 241 |
+
"cm": "Cameroon",
|
| 242 |
+
"ca": "Canada",
|
| 243 |
+
"cv": "Cape Verde",
|
| 244 |
+
"cf": "Central African Republic",
|
| 245 |
+
"td": "Chad",
|
| 246 |
+
"cl": "Chile",
|
| 247 |
+
"cn": "China",
|
| 248 |
+
"co": "Colombia",
|
| 249 |
+
"km": "Comoros",
|
| 250 |
+
"cg": "Congo",
|
| 251 |
+
"cd": "Congo (Dem. Rep.)",
|
| 252 |
+
"cr": "Costa Rica",
|
| 253 |
+
"ci": "Cote d'Ivoire",
|
| 254 |
+
"hr": "Croatia",
|
| 255 |
+
"cu": "Cuba",
|
| 256 |
+
"cy": "Cyprus",
|
| 257 |
+
"cz": "Czech Republic",
|
| 258 |
+
"dk": "Denmark",
|
| 259 |
+
"dj": "Djibouti",
|
| 260 |
+
"dm": "Dominica",
|
| 261 |
+
"do": "Dominican Republic",
|
| 262 |
+
"ec": "Ecuador",
|
| 263 |
+
"eg": "Egypt",
|
| 264 |
+
"sv": "El Salvador",
|
| 265 |
+
"gq": "Equatorial Guinea",
|
| 266 |
+
"er": "Eritrea",
|
| 267 |
+
"ee": "Estonia",
|
| 268 |
+
"sz": "Swaziland",
|
| 269 |
+
"et": "Ethiopia",
|
| 270 |
+
"fj": "Fiji",
|
| 271 |
+
"fi": "Finland",
|
| 272 |
+
"fr": "France",
|
| 273 |
+
"ga": "Gabon",
|
| 274 |
+
"gm": "Gambia",
|
| 275 |
+
"ge": "Georgia",
|
| 276 |
+
"de": "Germany",
|
| 277 |
+
"gh": "Ghana",
|
| 278 |
+
"gr": "Greece",
|
| 279 |
+
"gd": "Grenada",
|
| 280 |
+
"gt": "Guatemala",
|
| 281 |
+
"gn": "Guinea",
|
| 282 |
+
"gw": "Guinea-Bissau",
|
| 283 |
+
"gy": "Guyana",
|
| 284 |
+
"ht": "Haiti",
|
| 285 |
+
"hn": "Honduras",
|
| 286 |
+
"hk": "Hong Kong",
|
| 287 |
+
"hu": "Hungary",
|
| 288 |
+
"is": "Iceland",
|
| 289 |
+
"in": "India",
|
| 290 |
+
"id": "Indonesia",
|
| 291 |
+
"ir": "Iran",
|
| 292 |
+
"iq": "Iraq",
|
| 293 |
+
"ie": "Ireland",
|
| 294 |
+
"il": "Israel",
|
| 295 |
+
"it": "Italy",
|
| 296 |
+
"jm": "Jamaica",
|
| 297 |
+
"jp": "Japan",
|
| 298 |
+
"jo": "Jordan",
|
| 299 |
+
"kz": "Kazakhstan",
|
| 300 |
+
"ke": "Kenya",
|
| 301 |
+
"ki": "Kiribati",
|
| 302 |
+
"xk": "Kosovo",
|
| 303 |
+
"kw": "Kuwait",
|
| 304 |
+
"kg": "Kyrgyzstan",
|
| 305 |
+
"la": "Laos",
|
| 306 |
+
"lv": "Latvia",
|
| 307 |
+
"lb": "Lebanon",
|
| 308 |
+
"ls": "Lesotho",
|
| 309 |
+
"lr": "Liberia",
|
| 310 |
+
"ly": "Libya",
|
| 311 |
+
"li": "Liechtenstein",
|
| 312 |
+
"lt": "Lithuania",
|
| 313 |
+
"lu": "Luxembourg",
|
| 314 |
+
"mo": "Macao",
|
| 315 |
+
"mk": "North Macedonia",
|
| 316 |
+
"mg": "Madagascar",
|
| 317 |
+
"mw": "Malawi",
|
| 318 |
+
"my": "Malaysia",
|
| 319 |
+
"mv": "Maldives",
|
| 320 |
+
"ml": "Mali",
|
| 321 |
+
"mt": "Malta",
|
| 322 |
+
"mh": "Marshall Islands",
|
| 323 |
+
"mr": "Mauritania",
|
| 324 |
+
"mu": "Mauritius",
|
| 325 |
+
"mx": "Mexico",
|
| 326 |
+
"fm": "Micronesia",
|
| 327 |
+
"md": "Moldova",
|
| 328 |
+
"mc": "Monaco",
|
| 329 |
+
"mn": "Mongolia",
|
| 330 |
+
"me": "Montenegro",
|
| 331 |
+
"ma": "Morocco",
|
| 332 |
+
"mz": "Mozambique",
|
| 333 |
+
"mm": "Myanmar",
|
| 334 |
+
"na": "Namibia",
|
| 335 |
+
"nr": "Nauru",
|
| 336 |
+
"np": "Nepal",
|
| 337 |
+
"nl": "Netherlands",
|
| 338 |
+
"nz": "New Zealand",
|
| 339 |
+
"ni": "Nicaragua",
|
| 340 |
+
"ne": "Niger",
|
| 341 |
+
"ng": "Nigeria",
|
| 342 |
+
"kp": "North Korea",
|
| 343 |
+
"no": "Norway",
|
| 344 |
+
"om": "Oman",
|
| 345 |
+
"pk": "Pakistan",
|
| 346 |
+
"pw": "Palau",
|
| 347 |
+
"ps": "Palestinian Territories",
|
| 348 |
+
"pa": "Panama",
|
| 349 |
+
"pg": "Papua New Guinea",
|
| 350 |
+
"py": "Paraguay",
|
| 351 |
+
"pe": "Peru",
|
| 352 |
+
"ph": "Philippines",
|
| 353 |
+
"pl": "Poland",
|
| 354 |
+
"pt": "Portugal",
|
| 355 |
+
"qa": "Qatar",
|
| 356 |
+
"ro": "Romania",
|
| 357 |
+
"ru": "Russian Federation",
|
| 358 |
+
"rw": "Rwanda",
|
| 359 |
+
"kn": "Saint Kitts and Nevis",
|
| 360 |
+
"lc": "Saint Lucia",
|
| 361 |
+
"vc": "St. Vincent and the Grenadines",
|
| 362 |
+
"ws": "Samoa",
|
| 363 |
+
"sm": "San Marino",
|
| 364 |
+
"st": "Sao Tome and Principe",
|
| 365 |
+
"sa": "Saudi Arabia",
|
| 366 |
+
"sn": "Senegal",
|
| 367 |
+
"rs": "Serbia",
|
| 368 |
+
"sc": "Seychelles",
|
| 369 |
+
"sl": "Sierra Leone",
|
| 370 |
+
"sg": "Singapore",
|
| 371 |
+
"sk": "Slovakia",
|
| 372 |
+
"si": "Slovenia",
|
| 373 |
+
"sb": "Solomon Islands",
|
| 374 |
+
"so": "Somalia",
|
| 375 |
+
"za": "South Africa",
|
| 376 |
+
"kr": "South Korea",
|
| 377 |
+
"ss": "South Sudan",
|
| 378 |
+
"es": "Spain",
|
| 379 |
+
"lk": "Sri Lanka",
|
| 380 |
+
"sd": "Sudan",
|
| 381 |
+
"sr": "Suriname",
|
| 382 |
+
"se": "Sweden",
|
| 383 |
+
"ch": "Switzerland",
|
| 384 |
+
"sy": "Syria",
|
| 385 |
+
"tw": "Taiwan",
|
| 386 |
+
"tj": "Tajikistan",
|
| 387 |
+
"tz": "Tanzania",
|
| 388 |
+
"th": "Thailand",
|
| 389 |
+
"tl": "Timor-Leste",
|
| 390 |
+
"tg": "Togo",
|
| 391 |
+
"to": "Tonga",
|
| 392 |
+
"tt": "Trinidad and Tobago",
|
| 393 |
+
"tn": "Tunisia",
|
| 394 |
+
"tr": "Türkiye",
|
| 395 |
+
"tm": "Turkmenistan",
|
| 396 |
+
"tv": "Tuvalu",
|
| 397 |
+
"ug": "Uganda",
|
| 398 |
+
"ua": "Ukraine",
|
| 399 |
+
"ae": "United Arab Emirates",
|
| 400 |
+
"gb": "United Kingdom",
|
| 401 |
+
"us": "United States of America",
|
| 402 |
+
"uy": "Uruguay",
|
| 403 |
+
"uz": "Uzbekistan",
|
| 404 |
+
"vu": "Vanuatu",
|
| 405 |
+
"va": "Vatican City",
|
| 406 |
+
"ve": "Venezuela",
|
| 407 |
+
"vn": "Vietnam",
|
| 408 |
+
"ye": "Yemen",
|
| 409 |
+
"zm": "Zambia",
|
| 410 |
+
"zw": "Zimbabwe"
|
| 411 |
}
|
server.py
CHANGED
|
@@ -55,27 +55,27 @@ def create_app() -> Flask:
|
|
| 55 |
traceback.print_exc()
|
| 56 |
return jsonify({"error": str(e)}), 500
|
| 57 |
|
| 58 |
-
@app.route('/visa-checker', methods=['POST'])
|
| 59 |
-
async def visa_checker():
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
|
| 80 |
@app.route('/', methods=['GET'])
|
| 81 |
def hello_world():
|
|
|
|
| 55 |
traceback.print_exc()
|
| 56 |
return jsonify({"error": str(e)}), 500
|
| 57 |
|
| 58 |
+
# @app.route('/visa-checker', methods=['POST'])
|
| 59 |
+
# async def visa_checker():
|
| 60 |
+
# raw = request.get_data(as_text=True)
|
| 61 |
+
# body = json.loads(raw)
|
| 62 |
+
# source = body.get('source')
|
| 63 |
+
# logging.info(f"Received visa check request: {body}")
|
| 64 |
+
# destination = body.get('destination')
|
| 65 |
+
# async with PassportIndexVisaScraper(debug=True) as scraper:
|
| 66 |
+
# if not await scraper.initialize_session():
|
| 67 |
+
# return jsonify({"error": "Failed to initialize session"}), 500
|
| 68 |
+
# result = await scraper.check_visa_requirement_browser(source, destination)
|
| 69 |
|
| 70 |
+
# if result:
|
| 71 |
+
# return jsonify(result), 200
|
| 72 |
+
# else:
|
| 73 |
+
# result = await scraper.check_visa_interactive(source, destination)
|
| 74 |
+
# if result:
|
| 75 |
+
# return jsonify(result), 200
|
| 76 |
+
# else:
|
| 77 |
+
# return jsonify({"error": "Failed to retrieve visa information"}), 404
|
| 78 |
+
# return jsonify({"error": "Unexpected error"}), 500
|
| 79 |
|
| 80 |
@app.route('/', methods=['GET'])
|
| 81 |
def hello_world():
|
visa_avaibility_playwright_20251015.csv
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
text,days,pass,dest,source
|
| 2 |
+
visa required,N/A,ID,Afghanistan,Indonesia
|
| 3 |
+
visa-free,N/A,ID,Albania,Indonesia
|
| 4 |
+
visa required,N/A,ID,Algeria,Indonesia
|
| 5 |
+
visa required,N/A,ID,Andorra,Indonesia
|
| 6 |
+
visa-free / 30 days,N/A,ID,Angola,Indonesia
|
| 7 |
+
eVisa,N/A,ID,Antigua and Barbuda,Indonesia
|
| 8 |
+
visa required,N/A,ID,Argentina,Indonesia
|
| 9 |
+
eVisa · visa on arrival / 120 days,N/A,ID,Armenia,Indonesia
|
| 10 |
+
eVisa,N/A,ID,Australia,Indonesia
|
| 11 |
+
visa required,N/A,ID,Austria,Indonesia
|
| 12 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Azerbaijan,Indonesia
|
| 13 |
+
eVisa,N/A,ID,Bahamas,Indonesia
|
| 14 |
+
eVisa,N/A,ID,Bahrain,Indonesia
|
| 15 |
+
visa on arrival / 30 days,N/A,ID,Bangladesh,Indonesia
|
| 16 |
+
visa-free / 90 days,N/A,ID,Barbados,Indonesia
|
| 17 |
+
visa-free / 30 days,N/A,ID,Belarus,Indonesia
|
| 18 |
+
visa required,N/A,ID,Belgium,Indonesia
|
| 19 |
+
visa required,N/A,ID,Belize,Indonesia
|
| 20 |
+
eVisa,N/A,ID,Benin,Indonesia
|
| 21 |
+
eVisa,N/A,ID,Bhutan,Indonesia
|
| 22 |
+
eVisa,N/A,ID,Bolivia,Indonesia
|
| 23 |
+
visa required,N/A,ID,Bosnia and Herzegovina,Indonesia
|
| 24 |
+
eVisa,N/A,ID,Botswana,Indonesia
|
| 25 |
+
visa-free / 30 days,N/A,ID,Brazil,Indonesia
|
| 26 |
+
visa-free / 14 days,N/A,ID,Brunei,Indonesia
|
| 27 |
+
visa required,N/A,ID,Bulgaria,Indonesia
|
| 28 |
+
eVisa,N/A,ID,Burkina Faso,Indonesia
|
| 29 |
+
visa on arrival / 30 days,N/A,ID,Burundi,Indonesia
|
| 30 |
+
visa-free / 30 days,N/A,ID,Cambodia,Indonesia
|
| 31 |
+
eVisa,N/A,ID,Cameroon,Indonesia
|
| 32 |
+
visa required,N/A,ID,Canada,Indonesia
|
| 33 |
+
visa on arrival (EASE),N/A,ID,Cape Verde,Indonesia
|
| 34 |
+
visa required,N/A,ID,Central African Republic,Indonesia
|
| 35 |
+
eVisa,N/A,ID,Chad,Indonesia
|
| 36 |
+
visa-free / 90 days,N/A,ID,Chile,Indonesia
|
| 37 |
+
visa required,N/A,ID,China,Indonesia
|
| 38 |
+
visa-free / 90 days,N/A,ID,Colombia,Indonesia
|
| 39 |
+
visa on arrival / 45 days,N/A,ID,Comoros,Indonesia
|
| 40 |
+
visa required,N/A,ID,Congo,Indonesia
|
| 41 |
+
eVisa / 90 days,N/A,ID,Congo (Dem. Rep.),Indonesia
|
| 42 |
+
visa required,N/A,ID,Costa Rica,Indonesia
|
| 43 |
+
pre-enrollment / 90 days,N/A,ID,Cote d'Ivoire,Indonesia
|
| 44 |
+
visa required,N/A,ID,Croatia,Indonesia
|
| 45 |
+
eVisa / 90 days,N/A,ID,Cuba,Indonesia
|
| 46 |
+
visa required,N/A,ID,Cyprus,Indonesia
|
| 47 |
+
visa required,N/A,ID,Czech Republic,Indonesia
|
| 48 |
+
visa required,N/A,ID,Denmark,Indonesia
|
| 49 |
+
eVisa · visa on arrival / 90 days,N/A,ID,Djibouti,Indonesia
|
| 50 |
+
visa-free / 21 days,N/A,ID,Dominica,Indonesia
|
| 51 |
+
visa required,N/A,ID,Dominican Republic,Indonesia
|
| 52 |
+
visa-free / 90 days,N/A,ID,Ecuador,Indonesia
|
| 53 |
+
visa required,N/A,ID,Egypt,Indonesia
|
| 54 |
+
eVisa,N/A,ID,El Salvador,Indonesia
|
| 55 |
+
eVisa,N/A,ID,Equatorial Guinea,Indonesia
|
| 56 |
+
visa required,N/A,ID,Eritrea,Indonesia
|
| 57 |
+
visa required,N/A,ID,Estonia,Indonesia
|
| 58 |
+
visa required,N/A,ID,Swaziland,Indonesia
|
| 59 |
+
eVisa · visa on arrival / 90 days,N/A,ID,Ethiopia,Indonesia
|
| 60 |
+
visa-free / 120 days,N/A,ID,Fiji,Indonesia
|
| 61 |
+
visa required,N/A,ID,Finland,Indonesia
|
| 62 |
+
visa required,N/A,ID,France,Indonesia
|
| 63 |
+
eVisa / 90 days,N/A,ID,Gabon,Indonesia
|
| 64 |
+
visa-free / 90 days,N/A,ID,Gambia,Indonesia
|
| 65 |
+
eVisa,N/A,ID,Georgia,Indonesia
|
| 66 |
+
visa required,N/A,ID,Germany,Indonesia
|
| 67 |
+
visa required,N/A,ID,Ghana,Indonesia
|
| 68 |
+
visa required,N/A,ID,Greece,Indonesia
|
| 69 |
+
visa required,N/A,ID,Grenada,Indonesia
|
| 70 |
+
visa required,N/A,ID,Guatemala,Indonesia
|
| 71 |
+
eVisa / 90 days,N/A,ID,Guinea,Indonesia
|
| 72 |
+
visa on arrival / 90 days,N/A,ID,Guinea-Bissau,Indonesia
|
| 73 |
+
visa-free / 30 days,N/A,ID,Guyana,Indonesia
|
| 74 |
+
visa-free / 90 days,N/A,ID,Haiti,Indonesia
|
| 75 |
+
visa required,N/A,ID,Honduras,Indonesia
|
| 76 |
+
visa-free / 30 days,N/A,ID,Hong Kong,Indonesia
|
| 77 |
+
visa required,N/A,ID,Hungary,Indonesia
|
| 78 |
+
visa required,N/A,ID,Iceland,Indonesia
|
| 79 |
+
eVisa / 30 days,N/A,ID,India,Indonesia
|
| 80 |
+
visa-free / 15 days,N/A,ID,Iran,Indonesia
|
| 81 |
+
eVisa,N/A,ID,Iraq,Indonesia
|
| 82 |
+
visa required,N/A,ID,Ireland,Indonesia
|
| 83 |
+
eVisa,N/A,ID,Israel,Indonesia
|
| 84 |
+
visa required,N/A,ID,Italy,Indonesia
|
| 85 |
+
visa required,N/A,ID,Jamaica,Indonesia
|
| 86 |
+
visa waiver registration / 15 days,N/A,ID,Japan,Indonesia
|
| 87 |
+
eVisa · visa on arrival,N/A,ID,Jordan,Indonesia
|
| 88 |
+
visa-free / 30 days,N/A,ID,Kazakhstan,Indonesia
|
| 89 |
+
eTA / 90 days,N/A,ID,Kenya,Indonesia
|
| 90 |
+
visa-free / 90 days,N/A,ID,Kiribati,Indonesia
|
| 91 |
+
visa required,N/A,ID,Kosovo,Indonesia
|
| 92 |
+
visa required,N/A,ID,Kuwait,Indonesia
|
| 93 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Kyrgyzstan,Indonesia
|
| 94 |
+
visa-free / 30 days,N/A,ID,Laos,Indonesia
|
| 95 |
+
visa required,N/A,ID,Latvia,Indonesia
|
| 96 |
+
visa required,N/A,ID,Lebanon,Indonesia
|
| 97 |
+
visa required,N/A,ID,Lesotho,Indonesia
|
| 98 |
+
eVisa,N/A,ID,Liberia,Indonesia
|
| 99 |
+
eVisa,N/A,ID,Libya,Indonesia
|
| 100 |
+
visa required,N/A,ID,Liechtenstein,Indonesia
|
| 101 |
+
visa required,N/A,ID,Lithuania,Indonesia
|
| 102 |
+
visa required,N/A,ID,Luxembourg,Indonesia
|
| 103 |
+
visa-free / 30 days,N/A,ID,Macao,Indonesia
|
| 104 |
+
visa required,N/A,ID,North Macedonia,Indonesia
|
| 105 |
+
eVisa · visa on arrival / 90 days,N/A,ID,Madagascar,Indonesia
|
| 106 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Malawi,Indonesia
|
| 107 |
+
visa-free / 30 days,N/A,ID,Malaysia,Indonesia
|
| 108 |
+
visa on arrival / 30 days,N/A,ID,Maldives,Indonesia
|
| 109 |
+
visa-free / 30 days,N/A,ID,Mali,Indonesia
|
| 110 |
+
visa required,N/A,ID,Malta,Indonesia
|
| 111 |
+
visa on arrival / 90 days,N/A,ID,Marshall Islands,Indonesia
|
| 112 |
+
eVisa / 90 days,N/A,ID,Mauritania,Indonesia
|
| 113 |
+
visa on arrival / 60 days,N/A,ID,Mauritius,Indonesia
|
| 114 |
+
visa required,N/A,ID,Mexico,Indonesia
|
| 115 |
+
visa-free / 30 days,N/A,ID,Micronesia,Indonesia
|
| 116 |
+
eVisa,N/A,ID,Moldova,Indonesia
|
| 117 |
+
visa required,N/A,ID,Monaco,Indonesia
|
| 118 |
+
eVisa,N/A,ID,Mongolia,Indonesia
|
| 119 |
+
visa required,N/A,ID,Montenegro,Indonesia
|
| 120 |
+
visa-free / 90 days,N/A,ID,Morocco,Indonesia
|
| 121 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Mozambique,Indonesia
|
| 122 |
+
visa-free / 14 days,N/A,ID,Myanmar,Indonesia
|
| 123 |
+
visa-free / 30 days,N/A,ID,Namibia,Indonesia
|
| 124 |
+
visa required,N/A,ID,Nauru,Indonesia
|
| 125 |
+
eVisa · visa on arrival / 150 days,N/A,ID,Nepal,Indonesia
|
| 126 |
+
visa required,N/A,ID,Netherlands,Indonesia
|
| 127 |
+
visa required,N/A,ID,New Zealand,Indonesia
|
| 128 |
+
visa on arrival / 30 days,N/A,ID,Nicaragua,Indonesia
|
| 129 |
+
visa required,N/A,ID,Niger,Indonesia
|
| 130 |
+
eVisa / 90 days,N/A,ID,Nigeria,Indonesia
|
| 131 |
+
visa required,N/A,ID,North Korea,Indonesia
|
| 132 |
+
visa required,N/A,ID,Norway,Indonesia
|
| 133 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Oman,Indonesia
|
| 134 |
+
eVisa / 30 days,N/A,ID,Pakistan,Indonesia
|
| 135 |
+
visa on arrival / 30 days,N/A,ID,Palau,Indonesia
|
| 136 |
+
visa-free,N/A,ID,Palestinian Territories,Indonesia
|
| 137 |
+
visa required,N/A,ID,Panama,Indonesia
|
| 138 |
+
eVisitors / 60 days,N/A,ID,Papua New Guinea,Indonesia
|
| 139 |
+
visa required,N/A,ID,Paraguay,Indonesia
|
| 140 |
+
visa-free / 180 days,N/A,ID,Peru,Indonesia
|
| 141 |
+
visa-free / 30 days,N/A,ID,Philippines,Indonesia
|
| 142 |
+
visa required,N/A,ID,Poland,Indonesia
|
| 143 |
+
visa required,N/A,ID,Portugal,Indonesia
|
| 144 |
+
free visa on arrival / 30 days,N/A,ID,Qatar,Indonesia
|
| 145 |
+
visa required,N/A,ID,Romania,Indonesia
|
| 146 |
+
eVisa / 30 days,N/A,ID,Russian Federation,Indonesia
|
| 147 |
+
visa-free / 90 days,N/A,ID,Rwanda,Indonesia
|
| 148 |
+
eTA / 90 days,N/A,ID,Saint Kitts and Nevis,Indonesia
|
| 149 |
+
visa required,N/A,ID,Saint Lucia,Indonesia
|
| 150 |
+
visa-free / 90 days,N/A,ID,St. Vincent and the Grenadines,Indonesia
|
| 151 |
+
visa on arrival / 90 days,N/A,ID,Samoa,Indonesia
|
| 152 |
+
visa required,N/A,ID,San Marino,Indonesia
|
| 153 |
+
eVisa,N/A,ID,Sao Tome and Principe,Indonesia
|
| 154 |
+
visa required,N/A,ID,Saudi Arabia,Indonesia
|
| 155 |
+
visa required,N/A,ID,Senegal,Indonesia
|
| 156 |
+
visa-free / 30 days,N/A,ID,Serbia,Indonesia
|
| 157 |
+
tourist registration / 90 days,N/A,ID,Seychelles,Indonesia
|
| 158 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Sierra Leone,Indonesia
|
| 159 |
+
visa-free / 30 days,N/A,ID,Singapore,Indonesia
|
| 160 |
+
visa required,N/A,ID,Slovakia,Indonesia
|
| 161 |
+
visa required,N/A,ID,Slovenia,Indonesia
|
| 162 |
+
visa required,N/A,ID,Solomon Islands,Indonesia
|
| 163 |
+
eVisa,N/A,ID,Somalia,Indonesia
|
| 164 |
+
eVisa,N/A,ID,South Africa,Indonesia
|
| 165 |
+
eVisa,N/A,ID,South Korea,Indonesia
|
| 166 |
+
eVisa / 90 days,N/A,ID,South Sudan,Indonesia
|
| 167 |
+
visa required,N/A,ID,Spain,Indonesia
|
| 168 |
+
eVisa · visa on arrival / 30 days,N/A,ID,Sri Lanka,Indonesia
|
| 169 |
+
visa required,N/A,ID,Sudan,Indonesia
|
| 170 |
+
tourist card / 90 days,N/A,ID,Suriname,Indonesia
|
| 171 |
+
visa required,N/A,ID,Sweden,Indonesia
|
| 172 |
+
visa required,N/A,ID,Switzerland,Indonesia
|
| 173 |
+
eVisa,N/A,ID,Syria,Indonesia
|
| 174 |
+
visa required,N/A,ID,Taiwan,Indonesia
|
| 175 |
+
visa-free / 30 days,N/A,ID,Tajikistan,Indonesia
|
| 176 |
+
eVisa · visa on arrival,N/A,ID,Tanzania,Indonesia
|
| 177 |
+
visa-free / 60 days,N/A,ID,Thailand,Indonesia
|
| 178 |
+
visa-free / 30 days,N/A,ID,Timor-Leste,Indonesia
|
| 179 |
+
eVisa / 15 days,N/A,ID,Togo,Indonesia
|
| 180 |
+
visa required,N/A,ID,Tonga,Indonesia
|
| 181 |
+
visa required,N/A,ID,Trinidad and Tobago,Indonesia
|
| 182 |
+
visa-free / 90 days,N/A,ID,Tunisia,Indonesia
|
| 183 |
+
visa-free / 30 days,N/A,ID,Türkiye,Indonesia
|
| 184 |
+
visa required,N/A,ID,Turkmenistan,Indonesia
|
| 185 |
+
visa on arrival / 30 days,N/A,ID,Tuvalu,Indonesia
|
| 186 |
+
eVisa,N/A,ID,Uganda,Indonesia
|
| 187 |
+
eVisa,N/A,ID,Ukraine,Indonesia
|
| 188 |
+
eVisa,N/A,ID,United Arab Emirates,Indonesia
|
| 189 |
+
visa required,N/A,ID,United Kingdom,Indonesia
|
| 190 |
+
visa required,N/A,ID,United States of America,Indonesia
|
| 191 |
+
visa required,N/A,ID,Uruguay,Indonesia
|
| 192 |
+
visa-free / 30 days,N/A,ID,Uzbekistan,Indonesia
|
| 193 |
+
eVisa,N/A,ID,Vanuatu,Indonesia
|
| 194 |
+
visa required,N/A,ID,Vatican City,Indonesia
|
| 195 |
+
visa-free / 90 days,N/A,ID,Venezuela,Indonesia
|
| 196 |
+
visa-free / 30 days,N/A,ID,Vietnam,Indonesia
|
| 197 |
+
visa required,N/A,ID,Yemen,Indonesia
|
| 198 |
+
eVisa,N/A,ID,Zambia,Indonesia
|
| 199 |
+
eVisa · visa on arrival / 90 days,N/A,ID,Zimbabwe,Indonesia
|
| 200 |
+
eVisa,N/A,AF,Indonesia,Afghanistan
|
| 201 |
+
eVisa · visa on arrival / 30 days,N/A,AL,Indonesia,Albania
|
| 202 |
+
eVisa,N/A,DZ,Indonesia,Algeria
|
| 203 |
+
eVisa · visa on arrival / 30 days,N/A,AD,Indonesia,Andorra
|
| 204 |
+
eVisa,N/A,AO,Indonesia,Angola
|
| 205 |
+
eVisa,N/A,AG,Indonesia,Antigua and Barbuda
|
| 206 |
+
eVisa · visa on arrival / 30 days,N/A,AR,Indonesia,Argentina
|
| 207 |
+
eVisa · visa on arrival / 30 days,N/A,AM,Indonesia,Armenia
|
| 208 |
+
eVisa · visa on arrival / 30 days,N/A,AU,Indonesia,Australia
|
| 209 |
+
eVisa · visa on arrival / 30 days,N/A,AT,Indonesia,Austria
|
| 210 |
+
eVisa · visa on arrival / 30 days,N/A,AZ,Indonesia,Azerbaijan
|
| 211 |
+
eVisa,N/A,BS,Indonesia,Bahamas
|
| 212 |
+
eVisa · visa on arrival / 30 days,N/A,BH,Indonesia,Bahrain
|
| 213 |
+
eVisa,N/A,BD,Indonesia,Bangladesh
|
| 214 |
+
eVisa,N/A,BB,Indonesia,Barbados
|
| 215 |
+
eVisa · visa on arrival / 30 days,N/A,BY,Indonesia,Belarus
|
| 216 |
+
eVisa · visa on arrival / 30 days,N/A,BE,Indonesia,Belgium
|
| 217 |
+
eVisa,N/A,BZ,Indonesia,Belize
|
| 218 |
+
eVisa,N/A,BJ,Indonesia,Benin
|
| 219 |
+
eVisa,N/A,BT,Indonesia,Bhutan
|
| 220 |
+
eVisa,N/A,BO,Indonesia,Bolivia
|
| 221 |
+
eVisa · visa on arrival / 30 days,N/A,BA,Indonesia,Bosnia and Herzegovina
|
| 222 |
+
eVisa,N/A,BW,Indonesia,Botswana
|
| 223 |
+
visa-free / 30 days,N/A,BR,Indonesia,Brazil
|
| 224 |
+
visa-free / 30 days,N/A,BN,Indonesia,Brunei
|
| 225 |
+
eVisa · visa on arrival / 30 days,N/A,BG,Indonesia,Bulgaria
|
| 226 |
+
eVisa,N/A,BF,Indonesia,Burkina Faso
|
| 227 |
+
eVisa,N/A,BI,Indonesia,Burundi
|
| 228 |
+
visa-free / 30 days,N/A,KH,Indonesia,Cambodia
|
| 229 |
+
eVisa,N/A,CM,Indonesia,Cameroon
|
| 230 |
+
eVisa · visa on arrival / 30 days,N/A,CA,Indonesia,Canada
|
| 231 |
+
eVisa,N/A,CV,Indonesia,Cape Verde
|
| 232 |
+
eVisa,N/A,CF,Indonesia,Central African Republic
|
| 233 |
+
eVisa,N/A,TD,Indonesia,Chad
|
| 234 |
+
eVisa · visa on arrival / 30 days,N/A,CL,Indonesia,Chile
|
| 235 |
+
eVisa · visa on arrival / 30 days,N/A,CN,Indonesia,China
|
| 236 |
+
visa-free / 30 days,N/A,CO,Indonesia,Colombia
|
| 237 |
+
eVisa,N/A,KM,Indonesia,Comoros
|
| 238 |
+
eVisa,N/A,CG,Indonesia,Congo
|
| 239 |
+
eVisa,N/A,CD,Indonesia,Congo (Dem. Rep.)
|
| 240 |
+
eVisa,N/A,CR,Indonesia,Costa Rica
|
| 241 |
+
eVisa,N/A,CI,Indonesia,Cote d'Ivoire
|
| 242 |
+
eVisa · visa on arrival / 30 days,N/A,HR,Indonesia,Croatia
|
| 243 |
+
eVisa,N/A,CU,Indonesia,Cuba
|
| 244 |
+
eVisa · visa on arrival / 30 days,N/A,CY,Indonesia,Cyprus
|
| 245 |
+
eVisa · visa on arrival / 30 days,N/A,CZ,Indonesia,Czech Republic
|
| 246 |
+
eVisa · visa on arrival / 30 days,N/A,DK,Indonesia,Denmark
|
| 247 |
+
eVisa,N/A,DJ,Indonesia,Djibouti
|
| 248 |
+
eVisa,N/A,DM,Indonesia,Dominica
|
| 249 |
+
eVisa,N/A,DO,Indonesia,Dominican Republic
|
| 250 |
+
eVisa · visa on arrival / 30 days,N/A,EC,Indonesia,Ecuador
|
| 251 |
+
eVisa · visa on arrival / 30 days,N/A,EG,Indonesia,Egypt
|
| 252 |
+
eVisa,N/A,SV,Indonesia,El Salvador
|
| 253 |
+
eVisa,N/A,GQ,Indonesia,Equatorial Guinea
|
| 254 |
+
eVisa,N/A,ER,Indonesia,Eritrea
|
| 255 |
+
eVisa · visa on arrival / 30 days,N/A,EE,Indonesia,Estonia
|
| 256 |
+
eVisa,N/A,SZ,Indonesia,Swaziland
|
| 257 |
+
eVisa,N/A,ET,Indonesia,Ethiopia
|
| 258 |
+
eVisa,N/A,FJ,Indonesia,Fiji
|
| 259 |
+
eVisa · visa on arrival / 30 days,N/A,FI,Indonesia,Finland
|
| 260 |
+
eVisa · visa on arrival / 30 days,N/A,FR,Indonesia,France
|
| 261 |
+
eVisa,N/A,GA,Indonesia,Gabon
|
| 262 |
+
eVisa,N/A,GM,Indonesia,Gambia
|
| 263 |
+
eVisa,N/A,GE,Indonesia,Georgia
|
| 264 |
+
eVisa · visa on arrival / 30 days,N/A,DE,Indonesia,Germany
|
| 265 |
+
eVisa,N/A,GH,Indonesia,Ghana
|
| 266 |
+
eVisa · visa on arrival / 30 days,N/A,GR,Indonesia,Greece
|
| 267 |
+
eVisa,N/A,GD,Indonesia,Grenada
|
| 268 |
+
eVisa · visa on arrival / 30 days,N/A,GT,Indonesia,Guatemala
|
| 269 |
+
eVisa,N/A,GN,Indonesia,Guinea
|
| 270 |
+
eVisa,N/A,GW,Indonesia,Guinea-Bissau
|
| 271 |
+
eVisa,N/A,GY,Indonesia,Guyana
|
| 272 |
+
eVisa,N/A,HT,Indonesia,Haiti
|
| 273 |
+
eVisa,N/A,HN,Indonesia,Honduras
|
| 274 |
+
visa-free / 30 days,N/A,HK,Indonesia,Hong Kong
|
| 275 |
+
eVisa · visa on arrival / 30 days,N/A,HU,Indonesia,Hungary
|
| 276 |
+
eVisa · visa on arrival / 30 days,N/A,IS,Indonesia,Iceland
|
| 277 |
+
eVisa · visa on arrival / 30 days,N/A,IN,Indonesia,India
|
| 278 |
+
eVisa,N/A,IR,Indonesia,Iran
|
| 279 |
+
eVisa,N/A,IQ,Indonesia,Iraq
|
| 280 |
+
eVisa · visa on arrival / 30 days,N/A,IE,Indonesia,Ireland
|
| 281 |
+
eVisa,N/A,IL,Indonesia,Israel
|
| 282 |
+
eVisa · visa on arrival / 30 days,N/A,IT,Indonesia,Italy
|
| 283 |
+
eVisa,N/A,JM,Indonesia,Jamaica
|
| 284 |
+
eVisa · visa on arrival / 30 days,N/A,JP,Indonesia,Japan
|
| 285 |
+
eVisa · visa on arrival / 30 days,N/A,JO,Indonesia,Jordan
|
| 286 |
+
eVisa · visa on arrival / 30 days,N/A,KZ,Indonesia,Kazakhstan
|
| 287 |
+
eVisa · visa on arrival / 30 days,N/A,KE,Indonesia,Kenya
|
| 288 |
+
eVisa,N/A,KI,Indonesia,Kiribati
|
| 289 |
+
eVisa,N/A,XK,Indonesia,Kosovo
|
| 290 |
+
eVisa · visa on arrival / 30 days,N/A,KW,Indonesia,Kuwait
|
| 291 |
+
eVisa,N/A,KG,Indonesia,Kyrgyzstan
|
| 292 |
+
visa-free / 30 days,N/A,LA,Indonesia,Laos
|
| 293 |
+
eVisa · visa on arrival / 30 days,N/A,LV,Indonesia,Latvia
|
| 294 |
+
eVisa,N/A,LB,Indonesia,Lebanon
|
| 295 |
+
eVisa,N/A,LS,Indonesia,Lesotho
|
| 296 |
+
eVisa,N/A,LR,Indonesia,Liberia
|
| 297 |
+
eVisa,N/A,LY,Indonesia,Libya
|
| 298 |
+
eVisa · visa on arrival / 30 days,N/A,LI,Indonesia,Liechtenstein
|
| 299 |
+
eVisa · visa on arrival / 30 days,N/A,LT,Indonesia,Lithuania
|
| 300 |
+
eVisa · visa on arrival / 30 days,N/A,LU,Indonesia,Luxembourg
|
| 301 |
+
eVisa,N/A,MO,Indonesia,Macao
|
| 302 |
+
eVisa,N/A,MK,Indonesia,North Macedonia
|
| 303 |
+
eVisa,N/A,MG,Indonesia,Madagascar
|
| 304 |
+
eVisa,N/A,MW,Indonesia,Malawi
|
| 305 |
+
visa-free / 30 days,N/A,MY,Indonesia,Malaysia
|
| 306 |
+
eVisa · visa on arrival / 30 days,N/A,MV,Indonesia,Maldives
|
| 307 |
+
eVisa,N/A,ML,Indonesia,Mali
|
| 308 |
+
eVisa · visa on arrival / 30 days,N/A,MT,Indonesia,Malta
|
| 309 |
+
eVisa,N/A,MH,Indonesia,Marshall Islands
|
| 310 |
+
eVisa,N/A,MR,Indonesia,Mauritania
|
| 311 |
+
eVisa,N/A,MU,Indonesia,Mauritius
|
| 312 |
+
eVisa · visa on arrival / 30 days,N/A,MX,Indonesia,Mexico
|
| 313 |
+
eVisa,N/A,FM,Indonesia,Micronesia
|
| 314 |
+
eVisa,N/A,MD,Indonesia,Moldova
|
| 315 |
+
eVisa · visa on arrival / 30 days,N/A,MC,Indonesia,Monaco
|
| 316 |
+
eVisa · visa on arrival / 30 days,N/A,MN,Indonesia,Mongolia
|
| 317 |
+
eVisa,N/A,ME,Indonesia,Montenegro
|
| 318 |
+
eVisa · visa on arrival / 30 days,N/A,MA,Indonesia,Morocco
|
| 319 |
+
eVisa · visa on arrival / 30 days,N/A,MZ,Indonesia,Mozambique
|
| 320 |
+
visa-free / 30 days,N/A,MM,Indonesia,Myanmar
|
| 321 |
+
eVisa,N/A,NA,Indonesia,Namibia
|
| 322 |
+
eVisa,N/A,NR,Indonesia,Nauru
|
| 323 |
+
eVisa,N/A,NP,Indonesia,Nepal
|
| 324 |
+
eVisa · visa on arrival / 30 days,N/A,NL,Indonesia,Netherlands
|
| 325 |
+
eVisa · visa on arrival / 30 days,N/A,NZ,Indonesia,New Zealand
|
| 326 |
+
eVisa,N/A,NI,Indonesia,Nicaragua
|
| 327 |
+
eVisa,N/A,NE,Indonesia,Niger
|
| 328 |
+
eVisa,N/A,NG,Indonesia,Nigeria
|
| 329 |
+
eVisa,N/A,KP,Indonesia,North Korea
|
| 330 |
+
eVisa · visa on arrival / 30 days,N/A,NO,Indonesia,Norway
|
| 331 |
+
eVisa · visa on arrival / 30 days,N/A,OM,Indonesia,Oman
|
| 332 |
+
eVisa,N/A,PK,Indonesia,Pakistan
|
| 333 |
+
eVisa,N/A,PW,Indonesia,Palau
|
| 334 |
+
eVisa · visa on arrival / 30 days,N/A,PS,Indonesia,Palestinian Territories
|
| 335 |
+
eVisa,N/A,PA,Indonesia,Panama
|
| 336 |
+
eVisa · visa on arrival / 30 days,N/A,PG,Indonesia,Papua New Guinea
|
| 337 |
+
eVisa,N/A,PY,Indonesia,Paraguay
|
| 338 |
+
visa-free / 30 days,N/A,PE,Indonesia,Peru
|
| 339 |
+
visa-free / 30 days,N/A,PH,Indonesia,Philippines
|
| 340 |
+
eVisa · visa on arrival / 30 days,N/A,PL,Indonesia,Poland
|
| 341 |
+
eVisa · visa on arrival / 30 days,N/A,PT,Indonesia,Portugal
|
| 342 |
+
eVisa · visa on arrival / 30 days,N/A,QA,Indonesia,Qatar
|
| 343 |
+
eVisa · visa on arrival / 30 days,N/A,RO,Indonesia,Romania
|
| 344 |
+
eVisa · visa on arrival / 30 days,N/A,RU,Indonesia,Russian Federation
|
| 345 |
+
eVisa · visa on arrival / 30 days,N/A,RW,Indonesia,Rwanda
|
| 346 |
+
eVisa,N/A,KN,Indonesia,Saint Kitts and Nevis
|
| 347 |
+
eVisa,N/A,LC,Indonesia,Saint Lucia
|
| 348 |
+
eVisa,N/A,VC,Indonesia,St. Vincent and the Grenadines
|
| 349 |
+
eVisa,N/A,WS,Indonesia,Samoa
|
| 350 |
+
eVisa · visa on arrival / 30 days,N/A,SM,Indonesia,San Marino
|
| 351 |
+
eVisa,N/A,ST,Indonesia,Sao Tome and Principe
|
| 352 |
+
eVisa · visa on arrival / 30 days,N/A,SA,Indonesia,Saudi Arabia
|
| 353 |
+
eVisa,N/A,SN,Indonesia,Senegal
|
| 354 |
+
eVisa · visa on arrival / 30 days,N/A,RS,Indonesia,Serbia
|
| 355 |
+
eVisa · visa on arrival / 30 days,N/A,SC,Indonesia,Seychelles
|
| 356 |
+
eVisa,N/A,SL,Indonesia,Sierra Leone
|
| 357 |
+
visa-free / 30 days,N/A,SG,Indonesia,Singapore
|
| 358 |
+
eVisa · visa on arrival / 30 days,N/A,SK,Indonesia,Slovakia
|
| 359 |
+
eVisa · visa on arrival / 30 days,N/A,SI,Indonesia,Slovenia
|
| 360 |
+
eVisa,N/A,SB,Indonesia,Solomon Islands
|
| 361 |
+
eVisa,N/A,SO,Indonesia,Somalia
|
| 362 |
+
eVisa · visa on arrival / 30 days,N/A,ZA,Indonesia,South Africa
|
| 363 |
+
eVisa · visa on arrival / 30 days,N/A,KR,Indonesia,South Korea
|
| 364 |
+
eVisa,N/A,SS,Indonesia,South Sudan
|
| 365 |
+
eVisa · visa on arrival / 30 days,N/A,ES,Indonesia,Spain
|
| 366 |
+
eVisa,N/A,LK,Indonesia,Sri Lanka
|
| 367 |
+
eVisa,N/A,SD,Indonesia,Sudan
|
| 368 |
+
visa-free / 30 days,N/A,SR,Indonesia,Suriname
|
| 369 |
+
eVisa · visa on arrival / 30 days,N/A,SE,Indonesia,Sweden
|
| 370 |
+
eVisa · visa on arrival / 30 days,N/A,CH,Indonesia,Switzerland
|
| 371 |
+
eVisa,N/A,SY,Indonesia,Syria
|
| 372 |
+
eVisa · visa on arrival / 30 days,N/A,TW,Indonesia,Taiwan
|
| 373 |
+
eVisa,N/A,TJ,Indonesia,Tajikistan
|
| 374 |
+
eVisa · visa on arrival / 30 days,N/A,TZ,Indonesia,Tanzania
|
| 375 |
+
visa-free / 30 days,N/A,TH,Indonesia,Thailand
|
| 376 |
+
visa-free / 30 days,N/A,TL,Indonesia,Timor-Leste
|
| 377 |
+
eVisa,N/A,TG,Indonesia,Togo
|
| 378 |
+
eVisa,N/A,TO,Indonesia,Tonga
|
| 379 |
+
eVisa,N/A,TT,Indonesia,Trinidad and Tobago
|
| 380 |
+
eVisa · visa on arrival / 30 days,N/A,TN,Indonesia,Tunisia
|
| 381 |
+
visa-free / 30 days,N/A,TR,Indonesia,Türkiye
|
| 382 |
+
eVisa,N/A,TM,Indonesia,Turkmenistan
|
| 383 |
+
eVisa,N/A,TV,Indonesia,Tuvalu
|
| 384 |
+
eVisa,N/A,UG,Indonesia,Uganda
|
| 385 |
+
eVisa · visa on arrival / 30 days,N/A,UA,Indonesia,Ukraine
|
| 386 |
+
eVisa · visa on arrival / 30 days,N/A,AE,Indonesia,United Arab Emirates
|
| 387 |
+
eVisa · visa on arrival / 30 days,N/A,GB,Indonesia,United Kingdom
|
| 388 |
+
eVisa · visa on arrival / 30 days,N/A,US,Indonesia,United States of America
|
| 389 |
+
eVisa,N/A,UY,Indonesia,Uruguay
|
| 390 |
+
eVisa · visa on arrival / 30 days,N/A,UZ,Indonesia,Uzbekistan
|
| 391 |
+
eVisa,N/A,VU,Indonesia,Vanuatu
|
| 392 |
+
eVisa · visa on arrival / 30 days,N/A,VA,Indonesia,Vatican City
|
| 393 |
+
eVisa · visa on arrival / 30 days,N/A,VE,Indonesia,Venezuela
|
| 394 |
+
visa-free / 30 days,N/A,VN,Indonesia,Vietnam
|
| 395 |
+
eVisa,N/A,YE,Indonesia,Yemen
|
| 396 |
+
eVisa,N/A,ZM,Indonesia,Zambia
|
| 397 |
+
eVisa,N/A,ZW,Indonesia,Zimbabwe
|