我一直在尝试从使用 iCIMS 运行的网站中抓取数据,但是每当我尝试使用非常基本的 CSS 选择器或 XPATHS 时,程序都无法找到它。 这是我的代码:
import time
driver = webdriver.Chrome(options=chrome_options,service=service)
driver.get("https://careers-omrf.icims.com/jobs/search?hashed=-625950327&mobile=false&width=1359&height=500&bga=true&needsRedirect=false&jan1offset=-360&jun1offset=-300")
time.sleep(10)
a = driver.find_elements(By.CSS_SELECTOR,"a.iCIMS_Anchor")
每当我运行这段代码时, a 就会变成一个空列表。我什至尝试过仅使用元素 h2 的 CSS 选择器,但它仍然返回一个空列表,这很奇怪。
问题的根本原因:所需的元素位于IFRAME内(参见下面的屏幕截图)。
解决方案: 在这种情况下,您需要切换到
IFRAME
的上下文,然后执行您想要的操作。检查下面的代码并附上解释:
driver.get("https://careers-omrf.icims.com/jobs/search?hashed=-625950327&mobile=false&width=1359&height=500&bga=true&needsRedirect=false&jan1offset=-360&jun1offset=-300")
driver.maximize_window()
wait = WebDriverWait(driver, 10)
# Below like will switch into the context of IFRAME
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "icims_content_iframe")))
# Store desired elements into variable a
a = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.iCIMS_Anchor")))
# Print length of a
print(len(a))
# Below line is to come out of IFRAME
driver.switch_to.default_content()
需要进口:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
控制台输出:
20
Process finished with exit code 0