मेरे पास परिदृश्य है जहां मैं एक वेबपृष्ठ पर जाता हूं और प्रत्येक लिंक को एक नई विंडो में खोलता हूं और विशिष्ट दस्तावेजों की जांच करता हूं लेकिन प्रत्येक लिंक के माध्यम से जाने में काफी समय लगता है, इसलिए मल्टी-थ्रेडिंग का उपयोग करके प्रदर्शन बढ़ाने का कोई तरीका है

ज्ञात समस्या

सेलेनियम धागा सुरक्षित नहीं है

लेकिन मैं प्रत्येक थ्रेड के लिए ड्राइवर के कई उदाहरण बना सकता हूं जो इस समस्या का ख्याल रखता है

वर्तमान कोड जिसका मैं उपयोग कर रहा हूं

    for tag in self.driver.find_elements_by_xpath('//body//a[@href]'):
        current_window = self.driver.current_window_handle
        if href:
                self.driver.execute_script('window.open(arguments[0]);', href)
                time.sleep(10)
                new_window = [window for window in self.driver.window_handles if window != current_window][0]
                self.driver.switch_to.window(new_window)
                # Execute required operations
                func_url=self.driver.current_url
                self.driver.close()
                self.driver.switch_to.window(current_window)
                if not func_url:
                    continue
                if re.search('\.(?:pdf|png|jpg|doc|ppt|zip)',func_url):
                        cat=fd.findCat(func_url)
                        fd.findDate(func_url)
                time.sleep(10)
0
Pavan Kumar T S 24 अप्रैल 2017, 09:03
but i can create multiple instances of driver for each thread which takes care of this problem तो सवाल क्या है?
 – 
Flurin
24 अप्रैल 2017, 14:59
समय की खपत बहुत अधिक है मैं समय कम करना चाहता हूं इसलिए यदि मैं उदाहरण बनाता हूं तो यह अधिक समय और स्मृति जोड़ देगा इसलिए मैं बहु-थ्रेडिंग करने के लिए कोई वैकल्पिक तरीका मांग रहा हूं
 – 
Pavan Kumar T S
24 अप्रैल 2017, 15:07

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप समय जीतना चाहते हैं, तो सबसे पहले आपको WebDriverWait का उपयोग करना होगा:

यह एक उदाहरण है

def exec_sync(driver, script, waitTime, scriptName):
    global contador
    print scriptName
    driver.execute_script(script)
    WebDriverWait(driver, waitTime).until(
        EC.presence_of_element_located(
            (By.ID, 'uniqueIdentifier' + str(contador))
        )
        #driver.find_element_by_id(cadena)
    )
    contador += 1
    print 'Success'

दूसरा, वेबड्राइवर मल्टीथ्रेडिंग के लिए नहीं है जैसा आपने कहा है, इसलिए आपको SEMAPHORE का उपयोग करना होगा

https://docs.python.org/2/library/threading.html#semaphore-objects https://www.tutorialspoint.com/python/python_multithreading.htm

मल्टीथ्रेडिंग के लिए यही एकमात्र तरीका है

एमटी + प्रतीक्षा करें। समय बचाने के लिए आपको क्या चाहिए

1
Nicolas Alejandro Vaquero 25 अप्रैल 2017, 22:01