我正在尝试使用 Python Selenium Chrome 驱动程序自动化谷歌地图,我的代码很稳定,可以得到我需要的东西,但不是性能时间。
我使用迭代代码通过 Google Maps 获取商家数据,使用 Selenium 获取 1 个商家数据的时间速率低于 1 秒,但是当代码捕获异常时,需要很长时间,例如 6-7 秒。
以下是执行时间的一些摘要:
https://picoolio.net/image/dgxC(正常执行时间)
https://picoolio.net/image/dgxT(Open Hour发生异常时的执行时间,太长了)
https://picoolio.net/image/dgxV(发生异常时的执行时间,有时按预期运行)
这是一些获取开放时间列表的代码:
try:
openhour = wait(driver, 1).until(EC.visibility_of_element_located((By.XPATH,
'.//span[@class="section-open-hours-button maps-sprite-pane-info-arrowup"]')))
driver.execute_script("arguments[0].scrollIntoView(true);", openhour)
openhour.click()
openhourstacked = wait(driver, 1).until(EC.visibility_of_element_located((By.CLASS_NAME,
'section-open-hours-container-hoverable'))).get_attribute("aria-label")
openhourlist = openhourstacked.split(",")
openhourlist[len(openhourlist) - 1] = openhourlist[len(openhourlist) - 1].split(".")
openhourlist[len(openhourlist) - 1] = openhourlist[len(openhourlist) - 1][0]
except NoSuchElementException:
openhourlist = []
print("No Open Hour list in this merchant!")
openhour_trig = True
except WebDriverException:
openhourlist = []
print("Failed to load Open Hour list in this merchant!")
openhour_trig = True
很多建议说要正确地进行显式等待,我应该使用 WebDriverWait 和 EC(预期条件)的组合,我直接使用上面的代码进行了尝试,但是 WebDriverWait 似乎不适用于所有传入的异常,换句话说,有时成功,有时失败。
我试图用 替换EC.visibility_of_all_element_located,EC.presence_of_all_element_located但它没有任何区别。
我希望在发生任何异常时使执行时间仍然顺畅,除了上述方式之外,还有什么方法可以让 Selenium 在超时的情况下停止查找元素?或者这是一个互联网连接问题?欢迎任何想法!
是的,这样它确实避免了异常,但这会像以前一样重复搜索,因此当找不到元素时,它可能会再次进行长达 6-7 秒的长时间搜索。明确等待在这些术语中也没有真正的帮助思考
www说
绝地无双
相关分类