ElementClickInterceptedException:带有硒中的WebDriverWait()

问题描述 投票:0回答:1

最近,我一直在用Selenium在Python中尝试一些东西。我想浏览FIFA Web App,它是一个交互式应用程序。为了浏览菜单,我创建了一些功能。我首先尝试了此方法,但是ElementClickInterceptedException不断出现。

def Move_Watchlist(driver)

    time.sleep(random.randint(6,7))
    #Navigate to transfer menu
    driver.find_element_by_xpath('/html/body/main/section/nav/button[3]').click()

    time.sleep(random.randint(6,7))
    #Navigate to certain page in transfer menu
    driver.find_element_by_xpath('/html/body/main/section/section/div[2]/div/div/div[4]').click()     

因此,在查看堆栈溢出后,我将代码更改为此,但是没有成功;

def Move_Watchlist(driver):

    time.sleep(random.randint(6,7))
    #Navigate to transfer menu
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '/html/body/main/section/nav/button[3]'))).click()        

    time.sleep(random.randint(6,7))
    #Navigate to certain page in transfer menu
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'/html/body/main/section/section/div[2]/div/div/div[4]'))).click()

之所以发生错误,是因为在页面之间切换时会出现一个加载屏幕,但是WebDriverWait语句不等待加载屏幕消失,而只是单击,从而导致错误。至少我认为这正在发生。这是完整的错误:

    <ipython-input-13-85a4f66a2b0a> in Move_Watchlist(driver)
     18 
     19     time.sleep(random.randint(6,7))
---> 20     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'/html/body/main/section/section/div[2]/div/div/div[4]' ))).click()
     21     #driver.find_element_by_xpath('/html/body/main/section/section/div[2]/div/div/div[4]').click()
     22 

...

ElementClickInterceptedException: Message: element click intercepted: Element <div class="tile has-separator col-1-2 ut-tile-transfer-targets">...</div> is not clickable at point (588, 574). Other element would receive the click: <div class="ut-click-shield showing">...</div>

<div class="ut-click-shield showing">...</div>是加载屏幕元素。

关于如何解决此问题的任何想法?

python python-3.x selenium selenium-webdriver webdriverwait
1个回答
0
投票

添加WebDriverWait是一个好的开始,但它并不总是能解决问题。您可以尝试使用Javascript单击以解决ClickIntercepted错误:

element_to_click = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,'/html/body/main/section/section/div[2]/div/div/div[4]')))

# execute JS to click
driver.execute_script("arguments[0].click();", element_to_click)

过去,我已经成功地多次使用了此替代方法。

© www.soinside.com 2019 - 2024. All rights reserved.