Python 3.x 如何使用Selenium通过元素关闭popover/popup

Python 3.x 如何使用Selenium通过元素关闭popover/popup,python-3.x,selenium,web-scraping,popup,popover,Python 3.x,Selenium,Web Scraping,Popup,Popover,我正在为你做一个网站垃圾。当页面打开时,会弹出一个用于登录的弹出窗口。通过搜索网页设计,我可以找到X元素以关闭浏览器,如下所示:temp=WebDriverWaitdriver,10.untelec.visibility\u of_element\u locatedBy.CLASS\u NAME,“close”。如果我更深入地讨论这个问题,就会有一个and元素。我尝试过使用。单击类为“close”的元素,以及SVG和path元素。所有这些都不能关闭盒子,而且X没有按钮或其他类似元素。我该如何关闭

我正在为你做一个网站垃圾。当页面打开时,会弹出一个用于登录的弹出窗口。通过搜索网页设计,我可以找到X元素以关闭浏览器,如下所示:temp=WebDriverWaitdriver,10.untelec.visibility\u of_element\u locatedBy.CLASS\u NAME,“close”。如果我更深入地讨论这个问题,就会有一个and元素。我尝试过使用。单击类为“close”的元素,以及SVG和path元素。所有这些都不能关闭盒子,而且X没有按钮或其他类似元素。我该如何关闭这个popover?我不确定是否需要找到一个按钮式的元素来单击,但我找不到这样的元素。我看了一些问题和文章https://stackoverflow.com/questions/61923909/trying-to-close-popover-python-selenium-glassdoor, https://sqa.stackexchange.com/questions/5310/how-to-close-pop-up-window-in-selenium-webdriver, https://saucelabs.com/resources/articles/the-selenium-click-command 但是找不到解决方案。

您可以通过双击操作来解决此问题

WebDriverWait(driver, 20).until(ec.visibility_of_element_located((By.XPATH, 
   '//a[@class = 'close']/*[name()='svg']')))

close =  driver.find_element_by_xpath("//a[@class = 'close']/*[name()='svg']")

actionChains = ActionChains(driver)
actionChains.double_click(close).perform()
这方面的Java代码:

new WebDriverWait(driver, 20)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@class = 'close']/*[name()='svg']")));

WebElement close = driver.findElement(By.xpath("//a[@class = 'close']/*[name()='svg']"));

Actions action = new Actions(driver);
action.doubleClick(close).build().perform();

您可以通过双击操作来解决此问题

WebDriverWait(driver, 20).until(ec.visibility_of_element_located((By.XPATH, 
   '//a[@class = 'close']/*[name()='svg']')))

close =  driver.find_element_by_xpath("//a[@class = 'close']/*[name()='svg']")

actionChains = ActionChains(driver)
actionChains.double_click(close).perform()
这方面的Java代码:

new WebDriverWait(driver, 20)
                .until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@class = 'close']/*[name()='svg']")));

WebElement close = driver.findElement(By.xpath("//a[@class = 'close']/*[name()='svg']"));

Actions action = new Actions(driver);
action.doubleClick(close).build().perform();

实际上我自己也遇到了同样的问题。上述解决方案不适用于我,因此我将在此处发布我所做的:

基本上,我是按坐标单击的,而不是尝试查找按钮元素

注意:有些网页在您尝试单击其他内容之前不会显示弹出窗口,因此我必须先尝试单击其他元素。如果您需要这样做,请确保等待一秒钟左右的弹出加载

然后,您可以通过ActionChain完成其余工作:

elem = driver.find_element_by_class_name("CLASSNAME")    
ac = ActionChains(driver)
ac.move_to_element(elem).click().perform()
为了更安全,您需要将其封装在一个try-except块中


Dirk Bergstrom在这里提供了部分解决方案,这要归功于他:

实际上我自己也遇到了同样的问题。上述解决方案不适用于我,因此我将在此处发布我所做的:

基本上,我是按坐标单击的,而不是尝试查找按钮元素

注意:有些网页在您尝试单击其他内容之前不会显示弹出窗口,因此我必须先尝试单击其他元素。如果您需要这样做,请确保等待一秒钟左右的弹出加载

然后,您可以通过ActionChain完成其余工作:

elem = driver.find_element_by_class_name("CLASSNAME")    
ac = ActionChains(driver)
ac.move_to_element(elem).click().perform()
为了更安全,您需要将其封装在一个try-except块中


Dirk Bergstrom在这里提供了部分解决方案,这要归功于他:

我得到了以下错误:AttributeError:“ActionChains”对象没有属性“build”。如果我删除.build,它可以正常工作。我得到以下错误:AttributeError:“ActionChains”对象没有属性“build”。如果我删除了.build,它就可以正常工作。Web链接往往会随着时间的推移而衰减,因此如果你可以复制粘贴与Dirk Bergstrom网站相关的信息,那就太棒了。Web链接往往会随着时间的推移而衰减,因此如果你可以复制粘贴与Dirk Bergstrom网站相关的信息,那就太棒了。