这是我正在关注的文档 http://selenium-python.readthedocs.io/waits.html
这将引发异常:
driver = webdriver.Chrome(CHROME_DRIVER_PATH)
iframe_xpath = "//*[@id='targetForCaptcha1']/div/div/iframe"
captcha_iframe = driver.find_element_by_xpath(iframe_xpath)
driver.switch_to_frame(captcha_iframe)
checkBox = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, iframe_xpath)))
checkBox.click()
raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
但是这有效:
driver = webdriver.Chrome(CHROME_DRIVER_PATH)
iframe_xpath = "//*[@id='targetForCaptcha1']/div/div/iframe"
captcha_iframe = driver.find_element_by_xpath(iframe_xpath)
action=ActionChains(driver)
action.move_to_element(captcha_iframe)
action.click().perform()
以上两个是从头开始运行 python 脚本的独立会话。
为什么前一种工作似乎不是更标准的方式?
Iframe 是主 DOM 的一个节点。调用driver.switch_to_frame(captcha_iframe)
后,您切换到 iframe 的 DOM,By.XPATH, iframe_xpath
定位的节点不再可访问。
所以如果跳过driver.switch_to_frame(captcha_iframe)
行,它应该仍然可以从主 DOM 访问