我正在从网站(Investing.com)抓取一些数据,偶尔会弹出一个窗口。我一直在元素中寻找可点击的按钮,但找不到任何东西。
这是元素页面中的片段,其中<“ i”>元素是我能找到的与要关闭的'X'相关的所有元素。
...
<div class="right">
<i class="popupCloseIcon largeBannerCloser">
::after
</i>
...
我尝试过的代码如下:
from selenium.webdriver import ChromeOptions as Options
import selenium.webdriver as webdriver
chrome_options = Options()
#chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
d = webdriver.Chrome('chromedriver', options=chrome_options)
d.get("https://www.investing.com/currencies/eur-usd-technical")
iElements = d.find_elements_by_tag_name("i")
for name in iElements:
print(name.get_attribute("class"))
if name.get_attribute("class") == "popupCloseIcon largeBannerCloser":
print("im here")
name.click()
我打印文本并到达那里,所以知道我找到了我的元素,但是最终出现以下错误:
selenium.common.exceptions.ElementNotInteractableException:消息: 元素不可交互
虽然找不到其他可以交互的东西?
答案 0 :(得分:1)
发现我可以通过删除包含所有横幅的div元素来绕过此操作。可以通过CSS选择器找到它,然后使用一些Javascript(已复制/粘贴)将其删除。
这将允许我的点击进行注册,以便我可以根据需要获取元素。
下面的代码尝试等待弹出窗口5秒钟,在这种情况下,它将删除元素,否则它将继续尝试单击。
delay = 5
try:
myElem = WebDriverWait(d, delay).until(EC.presence_of_element_located(
(By.CSS_SELECTOR, 'body > div.generalOverlay.js-general-overlay.displayNone.js-promotional')))
element = d.find_element_by_css_selector('body > div.generalOverlay.js-general-overlay.displayNone.js-promotional')
d.execute_script("var element = arguments[0];element.parentNode.removeChild(element);", element)
print("Pop-Up Negated")
except TimeoutException:
print("No Pop-Up Detected")
aElements = d.find_elements_by_tag_name("a")
for name in aElements:
if name.get_attribute("href") is not None and "javascript:void" in name.get_attribute("href"):
if (name.text == i):
print(name.text)
name.click()
break
任何关于改进的评论都将不胜感激。
答案 1 :(得分:0)
您确定它不是警报吗? 一种检查方法是尝试检查“警报”窗口中的元素。
您可以尝试以下任一方法:
driver.switchTo().alert().dismiss();
driver.switchTo().alert().accept();
如果抛出NoAlertPresentException,弹出窗口的屏幕快照可能会帮助我们更好地帮助您。