如何使用 Selenium 通过 <a> 元素关闭 popover/popup

How to close popover/popup by <a> element using Selenium

我正在为 https://www.grailed.com/designers/jordan-brand/hi-top-sneakers 开发网络抓取工具。当页面打开时,会弹出一个登录窗口。通过网页设计搜索,我可以找到 X 元素来关闭浏览器,如下所示:temp = WebDriverWait(driver, 10).until(ec.visibility_of_element_located((By.CLASS_NAME, 'close')))。如果我更深入地研究这个,就会有一个和元素。我已经尝试在元素(使用 class 'close')以及 SVG 和路径元素上使用 .click() 。 None 个关闭框,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();

实际上我自己 运行 也遇到了同样的问题。上面的解决方案对我不起作用,所以我将 post 我在这里所做的:

本质上,我是通过坐标点击的,而不是试图找到按钮元素。

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

然后,您可以通过 ActionChain 完成剩下的工作:

elem = driver.find_element_by_class_name("CLASSNAME")    
ac = ActionChains(driver)
ac.move_to_element(elem).click().perform()

为了额外的安全,您需要将其封装在 try-except 块中。

感谢 Dirk Bergstrom 在此处提供部分解决方案:Clicking at coordinates without identifying element