Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“处理”;“接受饼干”;Python中的Selenium弹出窗口_Python_Selenium_Selenium Webdriver_Selenium Chromedriver_Alert - Fatal编程技术网

“处理”;“接受饼干”;Python中的Selenium弹出窗口

“处理”;“接受饼干”;Python中的Selenium弹出窗口,python,selenium,selenium-webdriver,selenium-chromedriver,alert,Python,Selenium,Selenium Webdriver,Selenium Chromedriver,Alert,我一直试图用selenium从这个房地产网站上获取一些信息。但是,当我访问网站时,我需要接受cookies才能继续。这只发生在机器人访问网站时,而不是我手动访问网站时。当我试图通过xpath或id查找对应的元素时,正如我在手动检查页面时所发现的那样,我得到以下错误 selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id=“uc btn accept banner

我一直试图用selenium从这个房地产网站上获取一些信息。但是,当我访问网站时,我需要接受cookies才能继续。这只发生在机器人访问网站时,而不是我手动访问网站时。当我试图通过xpath或id查找对应的元素时,正如我在手动检查页面时所发现的那样,我得到以下错误

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id=“uc btn accept banner”]”

有人知道怎么避开这件事吗?为什么我找不到元素

下面是接受cookies弹出窗口的图像

这是对应于“保持浏览”按钮的HTML。XPATH如上所示

<button aria-label="Keep browsing" id="uc-btn-accept-banner" class="uc-btn-new  uc-btn-accept">Keep browsing
          <span id="uc-optin-timer-display"></span></button>
继续浏览
你们非常接近

如果你在一个新的浏览器中打开你的页面,你会注意到页面已完全加载,然后,过一会儿你的弹出窗口就会出现

selenium中默认的等待策略就是这样。页面加载和显示之间的绘制延迟导致脚本失败

您有两个很好的同步选项

一,/ 包括隐式等待您的驱动程序。每个脚本执行一次,并影响所有对象。这将在抛出任何错误之前等待10秒,或在准备就绪时继续:

PATH = "/usr/bin/chromedriver"
driver = webdriver.Chrome(PATH)
driver.implicitly_wait(10)

driver.get("https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1&orderBy=relevance")
driver.find_element_by_xpath('//*[@id="uc-btn-accept-banner"]').click()

二,/ 仅对对象执行显式等待:

PATH = "/usr/bin/chromedriver"
driver = webdriver.Chrome(PATH)

driver.get("https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1&orderBy=relevance")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="uc-btn-accept-banner"]'))).click()


关于等待策略的更多信息是

弹出窗口真的是警报吗?或者是DOM中的元素通过JavaScript和CSS的某种组合变得可见和定位?有趣的是,我想你可能发现了一些东西,但是当我在窗口中按id查找匹配的元素时,我找不到它们。因此,我想他们一定在不同的窗口。我将如何处理这个问题?你能显示弹出窗口吗?我打开了这个站点,但没有收到任何弹出窗口(我等待了1分钟多),我建议调试它,首先要确保您的selenium驱动程序没有无头运行。然后使用您喜爱的调试器在
驱动程序.get()调用后设置断点。现在你可以直接在Chrome中查看页面,了解如何访问弹出窗口。你不需要切换。你看到的是模态。只要按一下按钮。如果删除
alert=driver.switch_至.alert
部分,则代码有效。
PATH = "/usr/bin/chromedriver"
driver = webdriver.Chrome(PATH)

driver.get("https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1&orderBy=relevance")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="uc-btn-accept-banner"]'))).click()