I'm using SeleniumBase with ThreadPoolExecutor for multithreading. How can I properly use keyboard actions (like pressing Enter, Tab, etc.) in each thread without interference?
class SBDriver:
@classmethod
def fetch_content(self, url: str, proxy: Optional[str] = None) -> str:
content = ''
try:
with SB(
uc=True,
browser='chrome',
proxy=proxy,
xvfb=True,
) as driver:
driver.uc_open_with_reconnect(url)
driver.uc_gui_press_keys = True
self.resolve(driver)
content = driver.get_page_source()
except Exception as err:
logging.error(err)
return content
@staticmethod
def resolve(driver: BaseCase):
try:
driver.disconnect()
pyautogui.press('enter')
time.sleep(2)
pyautogui.press('tab')
time.sleep(2)
pyautogui.keyDown('enter')
time.sleep(10)
pyautogui.keyUp('enter')
time.sleep(5)
driver.connect()
except Exception as err:
logging.error(err)
def fetch_with_proxy(url, proxy):
return SBDriver().fetch_content(url, proxy)
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
results = list(executor.map(fetch_with_proxy, urls_d, proxies))