"</button> is not clickable at point"Selenium弹出窗口



我知道以前有人问过这个问题的版本——这可能是重复的——但我已经搜索了所有这些问题,但找不到有效的解决方案。

我正试图从air.norfolk.gov网站上抓取一些数据。一开始的免责声明弹出窗口真的给我带来了麻烦(我现在的全部目标就是去掉一开始的弹出窗口,这样我就可以真正抓取数据了!(。

这是我当前的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import time
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get('https://air.norfolk.gov')
time.sleep(5)
element_name = driver.find_element(By.TAG_NAME, 'button')
print("Element is visible? " + str(element_name.is_displayed()))
driver.find_element(By.TAG_NAME, 'button').click()
print('button clicked')
time.sleep(5)
# Get search box element from webElement 'q' using Find Element
search_box = driver.find_element(By.ID, "primary_search")
search_box.send_keys("this would be where the address goes")

我尝试了很多你会注意到的事情:我尝试了检查元素是否可见——它是可见的。我尝试了添加等待,以确保它已经准备好接收我的点击。我尝试使用send_keys而不是click(),因为看起来这个按钮被包裹在div中。

每次我运行脚本时,我都会查看网站,免责声明并没有消失。

我得到的错误是:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button type="button" class="btn primary-button">...</button> is not clickable at point (912, 317). Other element would receive the click: <div class="modal-body">...</div>

我只是不确定为什么元素不能接收到点击。

请帮忙!

感谢

有5个元素突出显示button标记。因此,找到具有tag-name的元素将不能如预期的那样工作。

尝试使用以下xpath来单击I Understand

//button[text()='I Understand']

尝试使用以下代码:

#Imports required for Explicit waits:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver.get("https://air.norfolk.gov")
wait = WebDriverWait(driver,30)
wait.until(EC.element_to_be_clickable((By.XPATH,"//button[text()='I Understand']"))).click()

您发现了错误的按钮。您可以使用CSS标记#btn-primary找到它。

我建议你去那个网站,打开DevTools,用普通的javascript做测试,你会很快找到

如果免责声明弹出是警报,则可以按以下方式处理:

driver.switchTo().alert().dismiss();

或者:

driver.switchTo().alert().accept();

也可以尝试使用driver.getWindowHandles()在窗口之间切换,然后单击元素。

最新更新