forked from coskundeniz/ad_clicker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_in_loop.py
151 lines (125 loc) · 3.92 KB
/
run_in_loop.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
"""
Yavaş Yavaş Ölürler
Yavaş yavaş ölürler
Seyahat etmeyenler.
Yavaş yavaş ölürler
Okumayanlar, müzik dinlemeyenler,
Vicdanlarında hoşgörüyü barındıramayanlar.
Yavaş yavaş ölürler
Alışkanlıklarına esir olanlar,
Her gün aynı yolları yürüyenler,
Ufuklarını genişletmeyen ve değiştirmeyenler,
Elbiselerinin rengini değiştirme riskine bile
girmeyenler,
Bir yabancı ile konuşmayanlar.
Yavaş yavaş ölürler
Heyecanlardan kaçınanlar,
Tamir edilen kırık kalplerin gözlerindeki pırıltıyı
görmek istemekten kaçınanlar.
Yavaş yavaş ölürler
Aşkta veya işte bedbaht olup yön değiştirmeyenler,
Rüyalarını gerçekleştirmek için risk almayanlar,
Hayatlarında bir kez dahi mantıklı tavsiyelerin
dışına çıkmamış olanlar.
-- Pablo Neruda
"""
import traceback
import subprocess
import multiprocessing
from argparse import ArgumentParser
from time import sleep
from config import logger
def get_arg_parser() -> ArgumentParser:
"""Get argument parser
:rtype: ArgumentParser
:returns: ArgumentParser object
"""
arg_parser = ArgumentParser()
arg_parser.add_argument(
"-qf",
"--query_file",
help="Read queries to search from the given file",
)
arg_parser.add_argument(
"-pf",
"--proxy_file",
help="Select a proxy from the given file",
)
arg_parser.add_argument(
"-l",
"--max_scroll_limit",
default=0,
type=int,
help="Number of maximum scrolls on the search results page",
)
arg_parser.add_argument(
"-e",
"--excludes",
help="Exclude the ads that contain given words in url or title",
)
arg_parser.add_argument(
"--auth",
action="store_true",
help="""Use proxy with username and password.
If this is passed, proxy parameter should be in "username:password@host:port" format
""",
)
arg_parser.add_argument(
"-bc",
"--browser_count",
default=multiprocessing.cpu_count(),
type=int,
help="Maximum number of browsers to run concurrently",
)
arg_parser.add_argument(
"-ms",
"--multiprocess_style",
default=1,
type=int,
help="""Style of the multiprocess run.
1: single browser instance for each query (default)
2: multiple browser instances for each query
""",
)
arg_parser.add_argument(
"-wt",
"--wait_time",
default=60,
type=int,
help="Number of seconds to wait between runs",
)
arg_parser.add_argument("--incognito", action="store_true", help="Run in incognito mode")
return arg_parser
def main() -> None:
arg_parser = get_arg_parser()
args = arg_parser.parse_args()
if not args.query_file:
raise SystemExit("Missing query file!")
if not args.proxy_file:
raise SystemExit("Missing proxy file!")
command = ["python", "run_ad_clicker.py"]
command.extend(
["-qf", args.query_file, "-pf", args.proxy_file, "-l", str(args.max_scroll_limit)]
)
if args.auth:
command.append("--auth")
if args.excludes:
command.extend(["-e", args.excludes])
if args.browser_count:
command.extend(["-bc", str(args.browser_count)])
if args.incognito:
command.append("--incognito")
command.extend(["-ms", str(args.multiprocess_style)])
while True:
subprocess.run(command)
logger.info(f"Sleeping {args.wait_time} seconds...")
sleep(args.wait_time)
if __name__ == "__main__":
try:
main()
except Exception as exp:
logger.error("Exception occurred. See the details in the log file.")
message = str(exp).split("\n")[0]
logger.debug(f"Exception: {message}")
details = traceback.format_tb(exp.__traceback__)
logger.debug(f"Exception details: \n{''.join(details)}")