Python 3.x 如何使用Selenium通过元素关闭popover/popup
我正在为你做一个网站垃圾。当页面打开时,会弹出一个用于登录的弹出窗口。通过搜索网页设计,我可以找到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 但是找不到解决方案。您可以通过双击操作来解决此问题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没有按钮或其他类似元素。我该如何关闭
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网站相关的信息,那就太棒了。