在 Python 中使用 Selenium 选择嵌套的 iframe

Selecting nested iframes with Selenium in Python

我正在尝试在 Indeed 上自动填写轻松申请职位申请。 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')

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

找到第一个父 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