Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Seleniumv3和Python3单击X图标关闭iframe_Javascript_Python 3.x_Selenium_Selenium Chromedriver_Webdriverwait - Fatal编程技术网

Javascript 如何使用Seleniumv3和Python3单击X图标关闭iframe

Javascript 如何使用Seleniumv3和Python3单击X图标关闭iframe,javascript,python-3.x,selenium,selenium-chromedriver,webdriverwait,Javascript,Python 3.x,Selenium,Selenium Chromedriver,Webdriverwait,我在关闭iframe弹出窗口时遇到困难 使用python3 当我尝试检查浏览器中的代码时,它看起来像链接在标记内,而该标记内没有href。我的猜测是,这是一个javascript链接,而我根本不是一个喜欢javascript的人 我在谷歌上找不到任何东西,因为谷歌上出现的每种情况似乎都包括一个按钮或href标签 由于这是一个实时网站,我不分享html代码,但如果你需要它,请让我知道。 我对Selenium是个新手,如有任何帮助,我将不胜感激。 提前感谢。下面的代码等待帧并切换到它,然后单击关

我在关闭iframe弹出窗口时遇到困难 使用python3

当我尝试检查浏览器中的代码时,它看起来像链接在
标记内,而该标记内没有
href
。我的猜测是,这是一个javascript链接,而我根本不是一个喜欢javascript的人

我在谷歌上找不到任何东西,因为谷歌上出现的每种情况似乎都包括一个按钮或
href
标签

由于这是一个实时网站,我不分享html代码,但如果你需要它,请让我知道。 我对Selenium是个新手,如有任何帮助,我将不胜感激。
提前感谢。

下面的代码等待帧并切换到它,然后单击关闭按钮并切换回主帧。如果查找选择器有问题,请参阅我使用的选择器

WebDriverWait(driver, 10)
    .until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe.sp-fancybox-iframe")))
driver.find_element_by_css_selector("i.element-close-button").click()
driver.switch_to.default_content()

最可能的情况是,您必须编写自定义处理程序,以便能够跳过第一次打开网站时出现的不同类型的弹出窗口。例如,如果出现任何其他类型的弹出窗口,您可以将代码放在上面,以尝试/捕获能够跳过而不会出错。

根据您共享给
的url单击()
X图标上,您必须诱导WebDriverWait以使框架可用并切换到它,然后再次诱导WebDriverWait以使所需元素可单击,您可以使用以下解决方案:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.kariyer.net/")
    
    # xpath
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='sp-fancybox-iframe adaptive-resolution']")))
    
    # css_selector
    # WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.sp-fancybox-iframe.adaptive-resolution")))
    
    # xpath
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='element-content']/i[@class='fa fa-times element-close-button']"))).click()
    
    # css_selector
    # WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.element-content > i.fa.fa-times.element-close-button"))).click()
    
  • 浏览器快照:


那么您是否先切换到iframe?(例如,driver.switchTo().frame(“元素的id”))是的,我切换到了iframe。我的问题是,在HTML code.Python中找不到关闭iframe的链接。您需要导入:
来自selenium.webdriver.common.by import by
来自selenium.webdriver.support.ui导入WebDriverWait
来自selenium.webdriver.support导入预期条件,因为EC
我将可执行路径更改为my/usr/,并且它可以工作。这正是我想要的。非常感谢。出于好奇,如果你不介意我问的话,我们能在没有xpath的情况下完成吗?@user611811检查我的更新答案,让我知道statusWorks很棒。返回默认内容时遇到问题。我不应该使用
驱动程序返回默认内容。切换到.default\u content()
?还是我遗漏了什么?顺便说一下,我在登录时正在使用您的解决方案。