Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Python 如何根据Selenium提供的url单击弹出窗口的关闭图标_Python_Selenium_Iframe_Webdriver_Webdriverwait - Fatal编程技术网

Python 如何根据Selenium提供的url单击弹出窗口的关闭图标

Python 如何根据Selenium提供的url单击弹出窗口的关闭图标,python,selenium,iframe,webdriver,webdriverwait,Python,Selenium,Iframe,Webdriver,Webdriverwait,我试图摆脱第一次访问此页面时出现的弹出窗口: 根据html代码,我希望Selenium“单击”的“x”元素的id是“LeadPagesClose按钮” 所以我试着用下面的代码点击它: from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Safari() driver.get("https://www.realestate.com.kh

我试图摆脱第一次访问此页面时出现的弹出窗口:

根据html代码,我希望Selenium“单击”的“x”元素的id是“LeadPagesClose按钮”

所以我试着用下面的代码点击它:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Safari()
driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10")
driver.find_element_by_id("leadpages-close-button").close()
但它会导致一个错误:

  File "Untitled.py", line 6, in <module>
    driver.find_element_by_id("leadpages-close-button")
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 359, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 966, in find_element
    'value': value})['value']
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: 
文件“Untitled.py”,第6行,在
驱动程序。按id查找元素(“leadpages关闭按钮”)
文件“/usr/local/lib/python3.7/site packages/selenium/webdriver/remote/webdriver.py”,第359行,按id查找元素
返回self.find_元素(by=by.ID,value=ID_u)
文件“/usr/local/lib/python3.7/site packages/selenium/webdriver/remote/webdriver.py”,第966行,在find_元素中
'value':value})['value']
文件“/usr/local/lib/python3.7/site packages/selenium/webdriver/remote/webdriver.py”,第320行,在execute中
self.error\u handler.check\u响应(响应)
文件“/usr/local/lib/python3.7/site packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.NoSuchElementException:消息:

我做错了什么?

该元素包含在iframe中,因此您必须首先切换到iframe。尝试:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Safari()
driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-1")
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_tag_name("iframe")))
#driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # OR driver.switch_to.frame(0) # switch by iframe index
WebDriverWait(driver,20).until(EC.element_to_be_clickable(driver.find_element_by_id("leadpages-close-button")))
driver.find_element_by_id("leadpages-close-button").click()
driver.switch_to.default_content()

另请参见:

该元素包含在iframe中,因此必须首先切换到iframe。尝试:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Safari()
driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-1")
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_tag_name("iframe")))
#driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # OR driver.switch_to.frame(0) # switch by iframe index
WebDriverWait(driver,20).until(EC.element_to_be_clickable(driver.find_element_by_id("leadpages-close-button")))
driver.find_element_by_id("leadpages-close-button").click()
driver.switch_to.default_content()
另请参见以下内容:

尝试:

driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10")
time.sleep(1)
driver.find_element_by_id("leadpages-close-button").close()
尝试:


尝试下面的代码切换到动态iframe并单击关闭按钮

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10")
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_tag_name("iframe")))
driver.find_element_by_id("leadpages-close-button").click()

尝试下面的代码切换到动态iframe并单击关闭按钮

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10")
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_tag_name("iframe")))
driver.find_element_by_id("leadpages-close-button").click()

关闭首次访问url时显示的弹出窗口
https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10
,因为弹出窗口位于
中:

  • 首先,您必须诱导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
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions") 
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10")
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[contains(@src,'https://realestatekh.lpages.co/leadbox')]")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[contains(@action,'https://realestatekh.activehosted.com/proc.php')]/a[@id='leadpages-close-button']"))).click()
    
浏览器快照:


关闭首次访问url时显示的弹出窗口
https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10
,因为弹出窗口位于
中:

  • 首先,您必须诱导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
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions") 
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.realestate.com.kh/buy/?listing_type=sale&categories=Condo&order_by=relevance&is_certified=1&private_seller=1#page-10")
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[contains(@src,'https://realestatekh.lpages.co/leadbox')]")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[contains(@action,'https://realestatekh.activehosted.com/proc.php')]/a[@id='leadpages-close-button']"))).click()
    
浏览器快照:



您是否尝试过在单击该元素之前等待该元素出现?我第一次在不同的浏览器中访问该页面,但没有弹出窗口。您看不到上图中尖叫的人吗?太奇怪了…检查执行时是否有弹出窗口你是否尝试过在单击元素之前等待该元素出现?我第一次在不同的浏览器中访问该页面,但没有弹出窗口你看不到上图中尖叫的人吗?真奇怪…检查执行时是否有弹出窗口这不保证有效。它可能睡得不够长,也可能睡得太久。存在显式等待的selenium函数。这不能保证有效。它可能睡得不够长,也可能睡得太久。有一些selenium函数显式等待。奇怪的是,这似乎不起作用(没有错误消息,但iframe不会消失)。关于iframe的id,我是否遗漏了什么?Rodolphe,这是因为iframe是动态生成的。检查你是否尝试过你的解决方案,就像“theGuy”?我不能让它为我工作…它确实为我工作,但是我注意到如果我在最后使用带有“page-10”的url,iframe会从屏幕上消失。我在最后尝试了“第1页”,对我来说效果很好。别忘了按照安德森的建议增加等待时间。我将用我尝试过的更新我的答案。另外需要注意的是,我在Firefox而不是Safari中试用过,如果它仍然不适用于您,您可能需要检查等待时间。奇怪的是,这似乎不起作用(没有错误消息,但iframe不会消失)。关于iframe的id,我是否遗漏了什么?Rodolphe,这是因为iframe是动态生成的。检查你是否尝试过你的解决方案,就像“theGuy”?我不能让它为我工作…它确实为我工作,但是我注意到如果我在最后使用带有“page-10”的url,iframe会从屏幕上消失。我在最后尝试了“第1页”,对我来说效果很好。别忘了按照安德森的建议增加等待时间。我将用我尝试过的更新我的答案。另外需要注意的是,我在Firefox而不是Safari中试用过,如果它仍然不适用于您,您可能需要检查等待时间。仍然没有运气。加载页面后,它会立即关闭(在“page=”之后使用1而不是10时,它几乎会立即关闭)。这可能与我正在使用Safari有关吗?你能再澄清一点吗:什么结束了:有尖叫的人、主页、脚本的框架?我还是不走运。加载页面后,它会立即关闭(在“page=”之后使用1而不是10时,它几乎会立即关闭)。这可能与我正在使用Safari有关吗?你能再澄清一点吗:什么结束了:有尖叫的人、主页、脚本的框架?共享异常日志