我试图刮一页,但有时候点击链接/按钮时会遇到麻烦。 当网页加载时,那么" loadingWhiteBox"将出现在第一个然后在几秒后消失(但它将保留在HTML代码中),只要该框出现在网站上,我无法点击该链接并收到以下错误消息:
selenium.common.exceptions.ElementClickInterceptedException: Message:
Element <span class="taLnk ulBlueLinks"> is not clickable at point
(318.3000030517578,661.7999877929688) because another element <div
class="loadingWhiteBox"> obscures it
有什么方法可以解决这个问题吗?我已经尝试过使用以下命令:
driver.is_element_present_by_css('div[class*="loadingWhiteBox"]')
但即使元素不活跃,元素仍然存在。
答案 0 :(得分:14)
此错误消息...
selenium.common.exceptions.ElementClickInterceptedException: Message: Element <span class="taLnk ulBlueLinks"> is not clickable at point (318.3000030517578,661.7999877929688) because another element <div class="loadingWhiteBox"> obscures it
...表示所需的元素不可点击,因为其他一些元素将其遮盖了。
有多种方法可以解决此问题,其中几种方法如下:
当您打算调用click()
时,需要使{{1}的WebDriverWait WebDriverWait与{{1}以下WebDriverWait中的
使用element_to_be_clickable()
:
CSS_SELECTOR
使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.taLnk.ulBlueLinks"))).click()
:
XPATH
如果错误 ...另一个元素将其掩盖... 仍然存在,那么您首先需要与WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='taLnk ulBlueLinks']"))).click()
结合使用 WebDriverWait 阻塞元素的expected_conditions
如下:
使用invisibility_of_element()
:
CSS_SELECTOR
使用WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.CSS_SELECTOR, "div.loadingWhiteBox")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.taLnk.ulBlueLinks"))).click()
:
XPATH
如果问题仍然存在,则可以使用Locator Strategies方法,如下所示:
使用WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.XPATH, "//div[@class='loadingWhiteBox']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='taLnk ulBlueLinks']"))).click()
:
CSS_SELECTOR
使用WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.CSS_SELECTOR, "div.loadingWhiteBox")))
driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.taLnk.ulBlueLinks"))))
:
XPATH
您必须添加以下导入:
WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.XPATH, "//div[@class='loadingWhiteBox']")))
driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='taLnk ulBlueLinks']"))))
答案 1 :(得分:1)
出现错误是因为屏幕上出现另一个具有相同类或相同xpath / css的元素。
尝试给出一些等待方法,直到元素出现如Thread.sleep(),wait()。
答案 2 :(得分:1)
您可以等到元素消失,
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("loadingWhiteBox")));
答案 3 :(得分:1)
出现此错误时,我通常会尝试其他方法。 代替:
df = pd.DataFrame([['1','aa','ccc','rere','thth','my desc 1','','my feature2 1'], ['2','aa','ccc','rprp','','my desc 3','my feature1 1',''], ['3','aa','ccc','blbl','thth','my desc 5','my feature1 2','my feature2 2'], ['4','bb','coco','rere','','my desc 8','','my feature2 3'], ['5','bb','coco','baba','mpmp','my desc 11','my feature1 3','']], columns=['foo', 'bar','name_input','value_input','bulb','desc','feature1', 'feature2'])
尝试一下:
df= df.dropna(subset=['feature1', 'feature2'])
df.dropna(thresh=5, axis=0, inplace=True)
df= df[df.feature2.notnull()]
df= df[pd.notnull(df[['feature1', 'feature2']])]
即使存在覆盖,这也会单击找到的webElement。
如果这不起作用,那么请确保您尝试单击正确的“可单击” Web元素,并检查CSS选择器未指向其他WebElement。 “可点击”是指一个webElement,当您单击它时会执行一个操作(例如,打开一个新页面)。 Web驱动程序会单击它,您可能会认为它实际上没有执行单击操作,但实际上是在错误的webElement上执行了它。
答案 4 :(得分:1)
硒化物
WebElement element = selenide_element.toWebElement();
WebDriverRunner.driver().executeJavaScript("arguments[0].click();", element);
答案 5 :(得分:0)
您可以尝试以下2种方法点击元素。
element = driver.find_element_by_css('div[class*="loadingWhiteBox"]')
driver.execute_script("arguments[0].click();", element)
element = driver.find_element_by_css('div[class*="loadingWhiteBox"]')
webdriver.ActionChains(driver).move_to_element(element ).click(element ).perform()
希望这会奏效。
答案 6 :(得分:0)
我遇到了同样的问题,我只是用了这个: 榆木= driver.find_elements_by_css_selector('div [class * =“ loadingWhiteBox”]') elm.click()