我有一个场景,我去一个网页并在一个新窗口中打开每个链接并检查特定文档,但是它花了很多时间来浏览每个链接,所以有一种方法可以使用多线程提高性能
已知问题
selenium不是线程安全的
但我可以为每个处理此问题的线程创建多个驱动程序实例
我正在使用的当前代码
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 :(得分: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'
其次,WebDriver不是你所说的多线程,所以你必须使用SEMAPHORE
https://docs.python.org/2/library/threading.html#semaphore-objects https://www.tutorialspoint.com/python/python_multithreading.htm
这是多线程的唯一方法
MT + Wait.until是您节省时间所需的