【问题标题】:Click on body does not close pop up window selenium点击body不关闭弹窗selenium
【发布时间】:2021-05-14 17:47:36
【问题描述】:

我正在尝试在网页上执行正文点击。 当我加载网页时,会显示一个弹出窗口。我可以通过单击屏幕上的任意位置来关闭该弹出窗口。这个弹窗没有标准化的类名或id(不断变化)所以我想模拟一个按钮点击body来关闭它。

我试过了

driver.find_element_by_tag_name('html').click()

driver.find_element_by_tag_name('body').click()

我没有收到错误,但弹出窗口没有关闭

然后我尝试单击随机背景元素,但尝试时它给了我一个错误

driver.find_element_class_name('abc').click()

ElementClickInterceptedException: Message: element click intercepted

有什么方法可以点击body或者其他html标签来关闭吗?

<div tabindex="-1" aria-modal="true" role="alertdialog" class="ca ew bz bx by c0 sb cr fs cw ap st t6 t7 sv sq i9 sw sx sy">
<div data-baseweb="block" class="qv c4 db c3">
<div data-baseweb="block" class="aq ar fq fr">A message </div>
<div data-baseweb="block" class="f5 aq e5 d8 at ao"><p data-baseweb="typo-paragraphlarge" class="fo aq e5 d8 at au dg">Spend $50 </p></div></div></div>

【问题讨论】:

  • 该弹出窗口是否有 HTML?如果 URL 是公开的,您可以与我们分享吗?
  • 我已经编辑了代码以提供弹出代码,url目前还没有公开
  • 请使用@来提及某人。我创建了一个包含您共享的 HTML 内容的 HTML 文件,但仍然没有看到关闭按钮。

标签: python selenium


【解决方案1】:

为该弹出窗口使用 dom 元素,并在大约 2-3 秒的小等待后单击该弹出窗口。它应该可以工作。

注意:这里您使用的是 driver.find_element_name,但它应该是 dom 元素,例如 id、类或其他与该 dom 元素相关的属性。

driver.find_element_name('abc').click()

ElementClickInterceptedException: Message: element click intercepted

【讨论】:

  • 弹出窗口的dom元素?就像在弹出的 div 之一中一样?点击弹窗不是关闭它,需要点击屏幕上除弹窗以外的任何地方来关闭它。
  • 好的。所以点击弹出似乎并没有关闭它。我们可以在页面中进行刷新吗?也许然后弹出窗口不会出现。
  • 另外这是一个错字,我按类使用元素来点击其他地方
  • ChromeOptions 选项 = new ChromeOptions(); options.setExperimentalOption("excludeSwitches",Arrays.asList("disable-popup-blocking")); caps.setCapability(ChromeOptions.CAPABILITY,选项); 在你设置/实例化你的 chromedriver 的地方试试这个
【解决方案2】:

只是弹出窗口需要一些时间才能显示到您的

driver.find_element_by_tag_name('html').click()

已经执行了..

在你表演之前试着睡一觉body.click()

这是一个例子,但它是在 java 中

WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://bharathish-diggavi.github.io/Selenium-Practice/popup.html");
driver.findElement(By.id("popupButton")).click();
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
driver.findElement(By.tagName("body")).click();;

没有睡眠,代码就无法工作。

【讨论】:

  • 您是如何获得https://bharathish-diggavi.github.io/Selenium-Practice/popup.html 的?我在 OP 中没有看到这个
  • 我刚刚托管的那个页面用于解释
  • 你不明白。不同的页面将有不同的方式来处理弹出窗口。而且你上面写的不是python。
【解决方案3】:

您不能单击body 或带有Selenium 的某些背景元素,而这些元素实际上被其他元素覆盖,因为Selenium 模拟用户的UI 操作。
因此,如果您尝试单击下面的元素,则上面的元素实际上是点击的收据。这就是 element click intercepted 错误的字面意思。
在这种情况下,您可以使用 JavaScript 点击。
因此,要单击 bodyJS,请尝试以下操作:

driver.execute_script("document.getElementByTagName('body').click()")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2021-03-11
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多