-
Notifications
You must be signed in to change notification settings - Fork 0
/
fp_factory.py
133 lines (114 loc) · 4.17 KB
/
fp_factory.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
""" bot that takes produces a fingerprint with the current browser and . """
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver import ActionChains
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from setup import set_up_environment
from config import GECKODRIVER_BINARY
from config import FIREFOX_BINARY
from config import URL
from config import CONFIGURATION_NAME
from config import BROWSER_MODE
from config import EXTENSION
from config import HIDE_WEBDRIVER
from config import EXPERIMENT
def run():
set_up_environment()
print(GECKODRIVER_BINARY)
driver = webdriver.Firefox(executable_path=GECKODRIVER_BINARY, firefox_binary=FIREFOX_BINARY, firefox_options = BROWSER_MODE)
#injects the firefox extension to overwride web driver specifc variables
if HIDE_WEBDRIVER:
driver.install_addon(EXTENSION, temporary=True)
try:
driver.get(URL)
except Exception:
raise Exception("Could not connect. Is the fingerprint server running?")
if EXPERIMENT == "SLG19":
run_SLG19(driver, CONFIGURATION_NAME)
elif EXPERIMENT == "JKV19":
run_JKV19(driver, CONFIGURATION_NAME)
elif EXPERIMENT == "biometric":
run_biometric(driver)
elif EXPERIMENT == "idle":
run_idle(driver)
else:
run_openwpm_detector(driver)
def run_openwpm_detector(driver):
try:
""" clicks the button in order to start fingerprinting """
time.sleep(5)
el = driver.find_element_by_id("detect")
action = ActionChains(driver)
action.move_to_element(el).click(el).perform()
time.sleep(6)
driver.save_screenshot("screenshot.png")
ele = driver.find_element_by_css_selector("body")
print(ele.get_attribute('innerHTML'))
except Exception as e:
print("Error executing the interaction:\n {}".format(e))
finally:
driver.close()
def run_SLG19(driver, text):
try:
""" clicks the button in order to start fingerprinting """
time.sleep(5)
el = driver.find_element_by_css_selector("input")
action = ActionChains(driver)
action.move_to_element(el).click(el).perform()
time.sleep(3)
alert = driver.switch_to_alert()
alert.send_keys(text)
time.sleep(2)
alert.accept()
time.sleep(7)
except Exception as e:
print("Error executing SLG19 interaction:\n {}".format(e))
finally:
driver.close()
def run_JKV19(driver, text):
INPUT_ID = "txtConfDesc"
SUBMIT_BTN_ID = "btnFP"
input_field = driver.find_element_by_id(INPUT_ID)
submit_btn = driver.find_element_by_id(SUBMIT_BTN_ID)
try:
actions = ActionChains(driver)
time.sleep(1)
actions.move_to_element(input_field).click(input_field).send_keys(text).send_keys(Keys.TAB).send_keys(Keys.RETURN).perform()
time.sleep(3)
alert = driver.switch_to_alert()
alert.accept()
time.sleep(2)
print("Fingerprint taken for {}".format(text))
except Exception as e:
print("Error executing JKV19 interaction:\n {}".format(e))
finally:
driver.close()
def run_biometric(driver):
try:
# Open test for biometry
time.sleep(1)
driver.execute_script("document.querySelector('#biometry').click()")
time.sleep(3)
# Run test
action = ActionChains(driver)
el = driver.find_element_by_css_selector("button")
actions = ActionChains(driver)
time.sleep(1)
action.move_to_element(el).click(el).perform()
time.sleep(8)
el = driver.find_element_by_css_selector("input")
action.move_to_element(el).click(el).perform()
time.sleep(1)
action.send_keys("bot detection").perform()
time.sleep(60)
except Exception as e:
print("Error executing bimetrical tests interaction:\n {}".format(e))
finally:
driver.close()
def run_idle(driver):
print("Idling")
time.sleep(60000)
if __name__ == "__main__":
run()