WebDriverWait 未按预期工作
- 2024-11-15 08:36:00
- admin 原创
- 21
问题描述:
我正在使用 selenium 来抓取一些数据。
我点击的页面上有一个按钮,上面写着“custom_cols”。此按钮会打开一个窗口,我可以在窗口中选择我的列。
这个新窗口有时需要一些时间才能打开(大约 5 秒)。因此,为了解决这个问题,我使用了
WebDriverWait
延迟为 20 秒。但有时它无法在新窗口中选择查找元素,即使该元素可见。这种情况十次中只有一次发生,其余时间它都能正常工作。
我也在其他地方使用了相同的函数(WebDriverWait),它按预期工作。我的意思是它等到元素可见,然后在找到它时单击它。
我的问题是,为什么我在等待元素可见时,新窗口上的元素却不可见。补充一下,我尝试增加延迟时间,但仍然偶尔会收到该错误。
我的代码在这里
def wait_for_elem_xpath(self, delay = None, xpath = ""):
if delay is None:
delay = self.delay
try:
myElem = WebDriverWait(self.browser, delay).until(EC.presence_of_element_located((By.XPATH , xpath)))
except TimeoutException:
print ("xpath: Loading took too much time!")
return myElem
select_all_performance = '//*[@id="mks"]/body/div[7]/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/section/header/div'
self.wait_for_elem_xpath(xpath = select_all_performance).click()
解决方案 1:
一旦您等待元素并继续前进,当您尝试调用click()
方法而不是使用presence_of_element_located()
方法时,您需要使用element_to_be_clickable()
如下方法:
try:
myElem = WebDriverWait(self.browser, delay).until(EC.element_to_be_clickable((By.XPATH , xpath)))
更新
根据您在评论中提出的反问,以下是这三种方法的详细信息:
元素存在位置
presence_of_element_located(locator)定义如下:
class selenium.webdriver.support.expected_conditions.presence_of_element_located(locator)
Parameter : locator - used to find the element returns the WebElement once it is located
Description : An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible or interactable (i.e. clickable).
元素位置的可见性
visibility_of_element_located(locator)定义如下:
class selenium.webdriver.support.expected_conditions.visibility_of_element_located(locator)
Parameter : locator - used to find the element returns the WebElement once it is located and visible
Description : An expectation for checking that an element is present on the DOM of a page and visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.
可点击元素
element_to_be_clickable(locator)定义如下:
class selenium.webdriver.support.expected_conditions.element_to_be_clickable(locator)
Parameter : locator - used to find the element returns the WebElement once it is visible, enabled and interactable (i.e. clickable).
Description : An Expectation for checking an element is visible, enabled and interactable such that you can click it.
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD