硒无法在iframe中找到字典元素

时间:2020-06-24 17:08:47

标签: python selenium xpath iframe css-selectors

是硒的新手。我正在尝试使用它来“填写”网络表单,以便最终我可以在Python中以字典的形式获得结果。到目前为止,我有

from selenium.webdriver.common.keys import Keys
from time import sleep

driver = webdriver.Chrome()
driver.get("https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24")
sleep(5)
assert "Check bin collections" in driver.title
elem = driver.find_element_by_id('PostcodeSearch')
elem.clear()
elem.send_keys("RH10 7AB")
elem.send_keys(Keys.RETURN)
driver.close()

但是无论我选择哪种方法,我都在努力获取页面上的元素

2 个答案:

答案 0 :(得分:1)

尝试以下行

driver.get("https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24")

# your frame is getting changed you need to switch the frame and wait for it

WebDriverWait(driver,30).until(EC.frame_to_be_available_and_switch_to_it('fillform-frame-1'))

WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="PostcodeSearch"]')))
time.sleep(1)
# assert "Check bin collections" in driver.title
elem = driver.find_element_by_id('PostcodeSearch')
elem.clear()
elem.send_keys("RH10 7AB")
elem.send_keys(Keys.RETURN)

答案 1 :(得分:1)

邮政编码字段位于<iframe>中,因此您必须:

  • 诱导 WebDriverWait 以使所需的框架可用并切换到

  • 诱导 WebDriverWait 以使所需的元素可点击

  • 您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.get('https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24')
    elem = WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='Check bin collections']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#PostcodeSearch")))
    elem.send_keys("RH10 7AB")
    
  • 使用XPATH

    driver.get("https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24")
    elem = WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='Check bin collections']")))
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='PostcodeSearch']")))
    elem.send_keys("RH10 7AB")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

crawley


参考

您可以在以下位置找到相关的讨论