Javascript 使用Selenium关闭浏览器弹出窗口

Javascript 使用Selenium关闭浏览器弹出窗口,javascript,python,selenium,web-scraping,beautifulsoup,Javascript,Python,Selenium,Web Scraping,Beautifulsoup,我从一个网站(investment.com)上抓取一些数据,偶尔会弹出一个窗口。我在元素中寻找了一个可点击的按钮,但什么也找不到 这是元素页面中的片段,在这里我只能找到与要关闭的“X”相关的元素 。。。 ::之后 ... 我尝试过的代码如下: 从selenium.webdriver导入ChromeOptions作为选项 将selenium.webdriver导入为webdriver chrome_options=options() #chrome_选项。添加_参数('--headless')

我从一个网站(investment.com)上抓取一些数据,偶尔会弹出一个窗口。我在元素中寻找了一个可点击的按钮,但什么也找不到

这是元素页面中的片段,在这里我只能找到与要关闭的“X”相关的元素

。。。
::之后
...
我尝试过的代码如下:

从selenium.webdriver导入ChromeOptions作为选项
将selenium.webdriver导入为webdriver
chrome_options=options()
#chrome_选项。添加_参数('--headless')
chrome_选项。添加_参数('--no sandbox')
chrome_选项。添加_参数('--disable dev shm usage')
d=webdriver.Chrome('chromedriver',options=Chrome\u options)
d、 得到(”https://www.investing.com/currencies/eur-usd-technical")
IELENTS=d.通过标签名称(“i”)查找元素
IELENTS中的名称:
打印(name.get_属性(“类”))
如果name.get_属性(“类”)=“popupCloseIcon largeBannerCloser”:
打印(“我在这里”)
名称。单击()
我打印文本并到达那里,因此我知道我找到了我的元素,但最终出现以下错误:

selenium.common.exceptions.ElementNotInteractiableException:消息: 元素不可交互


但是,找不到其他可以交互的内容?

您确定这不是警报吗? 检查的一种方法是尝试检查警报窗口中的元素

您可以尝试以下任一方法:

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

如果出现NoAlertPresentException,弹出窗口的屏幕截图可能会帮助我们更好地帮助您。

您确定这不是警报吗? 检查的一种方法是尝试检查警报窗口中的元素

您可以尝试以下任一方法:

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

如果这引发了NoAlertPresentException,弹出窗口的屏幕截图可能会帮助我们更好地帮助您。

发现我可以通过删除包含所有横幅的div元素来绕过此问题。通过CSS选择器找到它,然后使用一些Javascript(复制/粘贴)删除它

这就允许我的点击注册,这样我就可以根据需要获得我的元素

下面的代码尝试等待弹出窗口5秒钟,在这种情况下,它将删除元素,否则它将继续尝试单击

delay=5
尝试:
myElem=WebDriverWait(d,延迟)。直到(EC.presence\u\u元素\u位于(
(By.CSS_选择器,'body>div.generalOverlay.js general overlay.displayNone.js'))
element=d.find\u element\u by\u css\u选择器('body>div.generalOverlay.js general overlay.displayne.js promotional'))
d、 执行脚本(“var element=arguments[0];element.parentNode.removeChild(element);”,element)
打印(“弹出否定”)
除TimeoutException外:
打印(“未检测到弹出窗口”)
AEElements=d.通过标签名称(“a”)查找元素
对于元素中的名称:
如果name.get_属性(“href”)不是None,并且name.get_属性(“href”)中不是“javascript:void”:
如果(name.text==i):
打印(name.text)
名称。单击()
打破

任何关于改进的评论都将不胜感激。

发现我可以通过删除包含所有横幅的div元素来绕过这个问题。通过CSS选择器找到它,然后使用一些Javascript(复制/粘贴)删除它

这就允许我的点击注册,这样我就可以根据需要获得我的元素

下面的代码尝试等待弹出窗口5秒钟,在这种情况下,它将删除元素,否则它将继续尝试单击

delay=5
尝试:
myElem=WebDriverWait(d,延迟)。直到(EC.presence\u\u元素\u位于(
(By.CSS_选择器,'body>div.generalOverlay.js general overlay.displayNone.js'))
element=d.find\u element\u by\u css\u选择器('body>div.generalOverlay.js general overlay.displayne.js promotional'))
d、 执行脚本(“var element=arguments[0];element.parentNode.removeChild(element);”,element)
打印(“弹出否定”)
除TimeoutException外:
打印(“未检测到弹出窗口”)
AEElements=d.通过标签名称(“a”)查找元素
对于元素中的名称:
如果name.get_属性(“href”)不是None,并且name.get_属性(“href”)中不是“javascript:void”:
如果(name.text==i):
打印(name.text)
名称。单击()
打破

如果您对改进有任何意见,我们将不胜感激。

必须重新键入:d.switch_to.alert.disease()错误如下:selenium.common.exceptions.NoAlertPresentException:Message:没有此类警报这是在我的print语句找到它之后。遗憾的是,您没有发布屏幕截图的权限。在图像中,有一个弹出面板和一个背景灰显的警报。由于Selenium抛出了一个NoAlertPresentException,我想我们需要先关闭弹出窗口。
您能保证以下几点吗:1。您正在唯一地标识正确的元素。当为元素键入正确的xPath或CssSelector时,在搜索元素时,它应该高亮显示
2。在您实际单击元素之前,它将显示并可单击。[使用显式等待,如“WebDriverWait”]
3。尝试使用JavaScriptExecutor单击定位的元素。必须重新键入到:d.switch_to.alert.disease()错误如下:selenium.common.exceptions.NoAlertPresentException:Message:没有这样的警报这是在我的print语句找到它之后。遗憾的是,我没有发布屏幕截图的权限。在图像中,有一个弹出面板和一个背景灰显的警报。由于Selenium抛出了一个NoAlertPresentException,我想我们需要先关闭弹出窗口。
您能保证以下几点吗:1。您正在唯一地标识正确的元素。当为元素键入正确的xPath或CssSelector时,在搜索元素时,它应该高亮显示
2。在您实际单击元素之前,它将显示并可单击。[使用显式等待,如“WebDriverWait”]