forked from sarperavci/CloudflareBypassForScraping
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
80 lines (68 loc) · 2.53 KB
/
test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import time
import logging
import os
from CloudflareBypasser import CloudflareBypasser
from DrissionPage import ChromiumPage, ChromiumOptions
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(),
logging.FileHandler('cloudflare_bypass.log', mode='w')
]
)
def get_chromium_options(browser_path: str, arguments: list) -> ChromiumOptions:
"""
Configures and returns Chromium options.
:param browser_path: Path to the Chromium browser executable.
:param arguments: List of arguments for the Chromium browser.
:return: Configured ChromiumOptions instance.
"""
options = ChromiumOptions()
options.set_paths(browser_path=browser_path)
for argument in arguments:
options.set_argument(argument)
return options
def main():
# Chromium Browser Path
browser_path = os.getenv('CHROME_PATH', "/usr/bin/google-chrome")
# Windows Example
# browser_path = os.getenv('CHROME_PATH', r"C:/Program Files/Google/Chrome/Application/chrome.exe")
# Arguments to make the browser better for automation and less detectable.
arguments = [
"-no-first-run",
"-force-color-profile=srgb",
"-metrics-recording-only",
"-password-store=basic",
"-use-mock-keychain",
"-export-tagged-pdf",
"-no-default-browser-check",
"-disable-background-mode",
"-enable-features=NetworkService,NetworkServiceInProcess,LoadCryptoTokenExtension,PermuteTLSExtensions",
"-disable-features=FlashDeprecationWarning,EnablePasswordsAccountStorage",
"-deny-permission-prompts",
"-disable-gpu",
"-accept-lang=en-US",
]
options = get_chromium_options(browser_path, arguments)
# Initialize the browser
driver = ChromiumPage(addr_or_opts=options)
try:
logging.info('Navigating to the demo page.')
driver.get('https://nopecha.com/demo/cloudflare')
# Where the bypass starts
logging.info('Starting Cloudflare bypass.')
cf_bypasser = CloudflareBypasser(driver)
cf_bypasser.bypass()
logging.info("Enjoy the content!")
logging.info("Title of the page: %s", driver.title)
# Sleep for a while to let the user see the result if needed
time.sleep(5)
except Exception as e:
logging.error("An error occurred: %s", str(e))
finally:
logging.info('Closing the browser.')
driver.quit()
if __name__ == '__main__':
main()