【问题标题】:Selecting nested iframes with Selenium in Python在 Python 中使用 Selenium 选择嵌套的 iframe
【发布时间】:2016-01-20 18:38:42
【问题描述】:

我正在尝试自动填写 Indeed 上的 Easy Apply 工作申请。 Here 是 Indeed 上使用“轻松申请”方法的工作申请示例。我已经尝试过各种方式来导航嵌套的 iframe;但是,我找不到有效的方法。我什至发现以前有人问过这个问题,不幸的是,这个问题的解决方案对我不起作用。以下是我现在的代码:

from selenium import webdriver

driver = webdriver.Firefox()

driver.get('indeed_url_goes_here')

driver.find_element_by_class_name('indeed-apply-button').click()
driver.switch_to_frame(driver.find_element_by_xpath('/html/body/iframe'))
driver.switch_to_frame(driver.find_element_by_xpath('//*[@id="indeedapply-modal-preload-iframe"]'))
driver.find_element_by_class_name('applicant.name')

【问题讨论】:

    标签: python selenium iframe nested


    【解决方案1】:

    找到第一个父 iframe 并切换到它,然后按索引切换到嵌套帧。

    完整的工作代码:

    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
    
    driver = webdriver.Firefox()
    driver.get("http://www.indeed.com/viewjob?jk=2e3d019aa34a2801&q=bartender&tk=1a9g51n08a3iof6h&from=web&advn=5333586156877432&sjdu=UvkB_mgi5f7NyMagFcTHP0E6zA3mclLGHWb8Kte-0FV3cY2ZuZvj3LUvh8wnnxrqeYWG3HpvTXBK3G4htWfwgfQeMa0N1Tds6VxYb4V3Vlg&pub=4a1b367933fd867b19b072952f68dceb")
    
    driver.find_element_by_class_name('indeed-apply-button').click()
    
    wait = WebDriverWait(driver, 10)
    frame = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[name$=modal-iframe]")))
    
    driver.switch_to.frame(frame)
    driver.switch_to.frame(0)
    
    print(driver.find_element_by_css_selector("h1.jobtitle").text)
    

    从弹出窗口打印职位名称:Bartender/Mixologist

    【讨论】:

    • 当我尝试这个时,我得到一个 NoSuchFrameException。无法定位框架。
    • 该方法导致超时异常。我尝试使用 /html/body/iframe xpath 并仍然得到超时异常。
    • @Mandeep 你是在点击应用按钮后放的吗?
    • 谢谢!它适用于火狐。不幸的是,它不适用于 PhantomJS,但我认为可以通过另一个显式等待来解决。
    【解决方案2】:

    首先,该元素没有类名 - 它有一个常规名称和一个 ID,因此请使用 driver.find_element_by_namedriver.find_element_by_id

    【讨论】:

    • 谢谢。我从内存中输入了大部分代码。我很惊讶他们不是其他错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2023-03-07
    • 2019-03-27
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多