繁体   English   中英

Selenium 中的弹出窗口,“此时不可点击”

[英]Pop-Up in Selenium, "</button> is not clickable at point"

我知道之前已经问过这些问题的版本 - 这可能是重复 - 但我已经搜索了所有这些并且找不到可行的解决方案。

我正在尝试从 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() 在窗口之间切换,然后单击元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM