上下文:我的意思是多线程几个浏览器实例并在其中执行进程。
提问的原因:我想知道在 python selenium 中检查元素的最有效/最省钱的方法是什么。我已经尝试了两种方法,我将在下面展示,并且对我的每一种方法都有一些了解。
首先,这是我返回驱动程序实例的函数:
def open_driver():
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_conte nt_setting_values.notifications" : 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
chrome_options.add_argument('ignore-certificate-errors')
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome, desired_capabilities=capa)
return driver
请注意这一特定行:
capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"
据我了解,这将告诉 selenium 不要等待 dom 完全加载。这是我必须选择的性能权衡,因为这个特定页面有时会无休止地卡在document.readyState == interactive
因此,在检查元素是否存在时,我基本上有两个选择(我也很感激建议),它们是:
WebDriverWait(self.driver,self.timeout).until(EC.presence_of_element_located((By.XPATH, element)))
它返回一个 WebElement。关于这条线的两件事:我认为它不尊重
self.timeout
时间,capa["pageLoadStrategy"] = "none"
但我不确定它非常不稳定,有时它运行得很快,有时很慢。
driver.execute_script("document.getElementsByClassName('alert alert-danger ng-binding ng-scope')[0].innerText")
与上述方法相比,这种try: except:
方法的执行速度似乎要快得多,但它似乎会使浏览器过载,然后执行会更频繁地显示错误(从服务器获取数据时出错)
话虽如此,并重申我是新手,我感谢您花时间阅读我的问题。
PS:我全力以赴寻求建议、改进和特别修正。