1
1
import sys
2
+ import random
3
+ import time
4
+ import os
5
+ import logging
6
+ from colorama import Fore , Style
7
+ import undetected_chromedriver as uc
8
+ from selenium .webdriver .common .by import By
9
+ from selenium .webdriver .common .keys import Keys
10
+
2
11
sys .path .append ('service' )
3
- from config_processing import read_config
4
12
from logs_processing import logging
5
13
from ua_rotator import user_agent_rotator
6
14
from proxies_rotator import proxies_rotator
7
-
8
- try :
9
- import requests .exceptions
10
- from colorama import Fore , Style
11
- import mechanicalsoup
12
- import re
13
- import requests
14
- import sqlite3
15
- import time
16
- import os
17
- except ImportError as e :
18
- print (Fore .RED + "Import error appeared. Reason: {}" .format (e ) + Style .RESET_ALL )
19
- sys .exit ()
15
+ from config_processing import read_config
20
16
21
17
def proxy_transfer ():
22
18
proxy_flag , proxies_list = proxies_rotator .get_proxies ()
@@ -27,44 +23,96 @@ def proxy_transfer():
27
23
working_proxies = proxies_rotator .check_proxies (proxies_list )
28
24
return proxy_flag , working_proxies
29
25
30
- def solid_google_dorking (query , dorking_delay , delay_step , proxy_flag , proxies_list , pages = 100 ):
26
+ def solid_google_dorking (query , proxy_flag , proxies_list , pages = 1 ):
27
+ result_query = []
28
+ request_count = 0
31
29
try :
32
- browser = mechanicalsoup .StatefulBrowser ()
33
- if proxy_flag == 1 :
34
- browser .session .proxies = proxies_rotator .get_random_proxy (proxies_list )
35
- else :
30
+ config_values = read_config ()
31
+ options = uc .ChromeOptions ()
32
+ options .binary_location = r"{}" .format (config_values ['dorking_browser' ])
33
+ dorking_browser_mode = config_values ['dorking_browser_mode' ]
34
+ if dorking_browser_mode .lower () == 'headless' :
35
+ options .add_argument ("--headless=new" )
36
+ elif dorking_browser_mode .lower () == 'nonheadless' :
36
37
pass
37
- browser .open ("https://www.google.com/" )
38
- browser .select_form ('form[action="/search"]' )
39
- browser ["q" ] = str (query )
40
- browser .submit_selected (btnName = "btnG" )
41
- result_query = []
42
- request_count = 0
38
+ options .add_argument ("--no-sandbox" )
39
+ options .add_argument ("--disable-dev-shm-usage" )
40
+ options .add_argument ("--disable-blink-features=AutomationControlled" )
41
+ options .add_argument ("--disable-infobars" )
42
+ options .add_argument ("--disable-extensions" )
43
+ options .add_argument (f"user-agent={ user_agent_rotator .get_random_user_agent ()} " )
44
+ if proxy_flag == 1 :
45
+ proxy = proxies_rotator .get_random_proxy (proxies_list )
46
+ options .add_argument (f'--proxy-server={ proxy ["http" ]} ' )
47
+ driver = uc .Chrome (options = options )
43
48
for page in range (pages ):
44
49
try :
45
- for link in browser .links ():
46
- target = link .attrs ['href' ]
47
- if (target .startswith ('/url?' ) and not target .startswith ("/url?q=http://webcache.googleusercontent.com" )):
48
- target = re .sub (r"^/url\?q=([^&]*)&.*" , r"\1" , target )
49
- result_query .append (target )
50
+ driver .get ("https://www.google.com" )
51
+ time .sleep (random .uniform (2 , 4 ))
52
+ try :
53
+ accepted = False
54
+ try :
55
+ accept_btn = driver .find_element (By .XPATH , '//button[contains(text(), "Принять все") or contains(text(), "Accept all")]' )
56
+ driver .execute_script ("arguments[0].click();" , accept_btn )
57
+ print (Fore .GREEN + 'Pressed "Accept all" button!' + Style .RESET_ALL )
58
+ accepted = True
59
+ time .sleep (random .uniform (2 , 3 ))
60
+ except :
61
+ pass
62
+ if not accepted :
63
+ iframes = driver .find_elements (By .TAG_NAME , "iframe" )
64
+ for iframe in iframes :
65
+ driver .switch_to .frame (iframe )
66
+ try :
67
+ accept_btn = driver .find_element (By .XPATH , '//button[contains(text(), "Принять все") or contains(text(), "Accept all")]' )
68
+ driver .execute_script ("arguments[0].click();" , accept_btn )
69
+ print (Fore .GREEN + 'Pressed "Accept all" button!' + Style .RESET_ALL )
70
+ accepted = True
71
+ driver .switch_to .default_content ()
72
+ time .sleep (random .uniform (2 , 3 ))
73
+ break
74
+ except :
75
+ driver .switch_to .default_content ()
76
+ continue
77
+ driver .switch_to .default_content ()
78
+ if not accepted :
79
+ print (Fore .GREEN + "Google TOS button was not found. Seems good..." + Style .RESET_ALL )
80
+ except Exception :
81
+ print (Fore .RED + f'Error with pressing "Accept all" button. Closing...' + Style .RESET_ALL )
82
+ driver .save_screenshot ("consent_error.png" )
83
+ driver .switch_to .default_content ()
84
+ search_box = driver .find_element (By .NAME , "q" )
85
+ for char in query :
86
+ search_box .send_keys (char )
87
+ time .sleep (random .uniform (0.05 , 0.2 ))
88
+ time .sleep (random .uniform (0.5 , 1.2 ))
89
+ search_box .send_keys (Keys .RETURN )
90
+ time .sleep (random .uniform (2.5 , 4 ))
91
+ links = driver .find_elements (By .CSS_SELECTOR , 'a' )
92
+ for link in links :
93
+ href = link .get_attribute ('href' )
94
+ if href and href .startswith ('http' ) and 'google.' not in href and 'webcache.googleusercontent.com' not in href :
95
+ result_query .append (href )
50
96
request_count += 1
51
- if request_count % delay_step == 0 :
52
- time . sleep ( dorking_delay )
53
- browser . session . headers [ 'User-Agent' ] = user_agent_rotator . get_random_user_agent ()
54
- browser . follow_link ( nr = page + 1 )
55
- except mechanicalsoup . LinkNotFoundError :
56
- break
97
+ try :
98
+ next_button = driver . find_element ( By . ID , 'pnnext' )
99
+ next_button . click ()
100
+ time . sleep ( random . uniform ( 2 , 3 ) )
101
+ except :
102
+ break
57
103
except Exception as e :
58
- logging .error (f'DORKING PROCESSING: ERROR. REASON: { e } ' )
59
- del result_query [- 2 :]
104
+ logging .error (f'DORKING PROCESSING (SELENIUM): ERROR. REASON: { e } ' )
105
+ continue
106
+ driver .quit ()
107
+ if len (result_query ) >= 2 :
108
+ del result_query [- 2 :]
60
109
return result_query
61
- except requests .exceptions .ConnectionError as e :
62
- print (Fore .RED + "Error while establishing connection with domain. No results will appear. See journal for details" + Style .RESET_ALL )
63
- logging .error (f'DORKING PROCESSING: ERROR. REASON: { e } ' )
64
110
except Exception as e :
65
111
logging .error (f'DORKING PROCESSING: ERROR. REASON: { e } ' )
112
+ print (Fore .RED + "Error while running Selenium dorking. See journal for details." + Style .RESET_ALL )
113
+ return []
66
114
67
- def save_results_to_txt (folderpath , table , queries , pages = 10 ):
115
+ def save_results_to_txt (folderpath , table , queries , pages = 1 ):
68
116
try :
69
117
config_values = read_config ()
70
118
dorking_delay = int (config_values ['dorking_delay (secs)' ])
@@ -80,7 +128,7 @@ def save_results_to_txt(folderpath, table, queries, pages=10):
80
128
for i , query in enumerate (queries , start = 1 ):
81
129
f .write (f"QUERY #{ i } : { query } \n " )
82
130
try :
83
- results = solid_google_dorking (query , dorking_delay , delay_step , proxy_flag , proxies_list , pages )
131
+ results = solid_google_dorking (query , proxy_flag , proxies_list , pages )
84
132
if not results :
85
133
f .write ("=> NO RESULT FOUND\n " )
86
134
total_results .append ((query , 0 ))
0 commit comments