File size: 4,858 Bytes
f4d52c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

def searchQuery(user_search, driver, elem, mode=0, score="", isLoggedIn=True):
    if isLoggedIn == False:
        anchors = driver.find_elements(By.XPATH, '//*[@class="sc-93qi7v-2 hbGpVM"]//a')
        for n_iter,anchor in enumerate(anchors):
            if anchor.get_attribute("lang") =="en":
                driver.execute_script("arguments[0].click();", anchor)
        
    user_search = user_search.lower()
    try:
        WebDriverWait(driver, timeout=5).until(EC.presence_of_element_located((By.XPATH, elem)))
    except:
        driver.refresh()
        WebDriverWait(driver, timeout=20).until(EC.presence_of_element_located((By.XPATH, elem)))
    search_bar = driver.find_element(By.XPATH, elem)

    try:
        search_bar.click()
        if not mode:
            time.sleep(1.8)
        driver.execute_script('arguments[0].value=arguments[1]', search_bar, user_search)
    except:
        time.sleep(3)
        driver.execute_script('arguments[0].value=arguments[1]', search_bar, user_search)
        
    if not mode:
        specific_Query(driver=driver, search_bar=search_bar, user_search=user_search)
    else:
        search_bar.send_keys(Keys.ARROW_DOWN)
        time.sleep(2)
    
    if mode:
        search_bar.send_keys(Keys.ARROW_DOWN)
        time.sleep(1.2)
    search_bar.send_keys(Keys.ENTER)
    time.sleep(0.3)

    try:
        driver.execute_script("arguments[0].value+=arguments[1]", search_bar, score)
        search_bar.send_keys(Keys.ENTER)
    except:
        pass


def save_Search(driver, mode=0):
    try:
        with open("./commands/url.txt", "r+") as file:
            lines = file.readlines()

            line_to_modify = mode + 1  # Line number to modify based on mode
            new_line_content = driver.current_url  # Content to write to the line

            if line_to_modify > len(lines):
                lines.extend(['\n'] * (line_to_modify - len(lines)))
            elif lines[line_to_modify - 1].strip() == new_line_content:
                # If the line already has the same content, no action is needed
                return

            lines[line_to_modify - 1] = new_line_content + '\n'

            file.seek(0)
            file.writelines(lines)
            file.truncate()
    except:
        line_to_modify = mode + 1  # Line number to modify based on mode
        new_line_content = driver.current_url  # Content to write to the line

        with open("./commands/url.txt", "w") as file:
            lines = ['\n'] * line_to_modify
            lines[line_to_modify - 1] = new_line_content + '\n'
            file.writelines(lines)



def continue_Search(driver, link, mode=0):
    try:
        with open("./commands/url.txt", "r") as file:
            lines = file.readlines()

        line_to_read = mode + 1  # Line number to read based on mode

        if len(lines) >= line_to_read and lines[line_to_read - 1].strip() != '':
            url = lines[line_to_read - 1].strip()
            driver.get(url)
        else:
            driver.get(link)
    except:
        driver.get(link)


def specific_Query(driver, search_bar, user_search):
    user_search = user_search.replace("_"," ").split()
    try:
        for user_word in user_search:
            time.sleep(1.2)
            driver.execute_script('arguments[0].value=arguments[1]', search_bar, user_word)
            time.sleep(0.6)
            search_bar.send_keys(Keys.SPACE)
            time.sleep(2.2)

            checker = 0
            tag_pos = 0

            search_bar_queries = driver.find_element(By.XPATH, '//*[@class="sc-1974j38-2 kjWkkt"]').find_elements(By.XPATH, './/*[@class="sc-d98f2c-0"]')
            for n_iter, query in enumerate(search_bar_queries):
                query_text = query.find_element(By.XPATH, './/div//div[2]').text.lower()

                for text in user_search:
                    if query_text.find(text) != -1:
                        checker += 1

                if checker == len(user_search):
                    tag_pos = n_iter
                    break
                else:
                    checker = 0

            if checker == len(user_search):
                for i in range(tag_pos+1):
                    time.sleep(0.5)
                    search_bar.send_keys(Keys.ARROW_DOWN)
                break
    except:
        driver.execute_script('arguments[0].value=arguments[1]', search_bar, user_search)
        search_bar.send_keys(Keys.ENTER)

def contains_works(driver, elem):
    try:
        WebDriverWait(driver, timeout=9).until(EC.presence_of_element_located((By.XPATH, elem)))
        return True
    except:
        return False