Это документ, за которым я следую 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 запускается с нуля.
Почему не работает первая работа, которая кажется более стандартным способом выполнения?
почему первое не работает?
@Andersson Я обновил вопрос, надеюсь, теперь вы можете отозвать свой закрытый запрос.
ОК. Можете ли вы теперь уточнить, почему вы хотите щелкнуть iframe, а не конкретный элемент внутри iframe?
Я хочу щелкнуть определенный элемент внутри, но более поздний способ, который в некоторой степени работает для меня, я обнаружил, что это лучшее, что я могу сделать для проблемы stackoverflow.com/questions/25670336/…






Iframe - это узел основной модели DOM. После вызова driver.switch_to_frame(captcha_iframe) вы переключились на DOM iframes, и узел, расположенный с помощью By.XPATH, iframe_xpath, больше не доступен.
Таким образом, он должен быть по-прежнему доступен из основного DOM, если пропустить строку driver.switch_to_frame(captcha_iframe)
это не проблема. эй, извини, можешь проверить, я обновил его снова, чтобы решить эту путаницу.
Нет. Это проблема. Обратите внимание, что во втором коде вы не переключаетесь на iframe. Просто добавьте driver.switch_to_frame(captcha_iframe), и ваш второй код тоже не сработает.
не эквивалент action.move_to_element(captcha_iframe)?
Точно нет! Позволяет выполнять наведение мышки на нужный элемент.
понял, отлично, он работает, когда я нажимаю на элемент внутри него. но как это получается, когда у нас есть developer.mozilla.org/en-US/docs/Web/Security/….
Я предполагаю, что переключение помогает, вы не можете получить доступ к двум доменам вместе, но как только вы переключите драйвер, чтобы он указывал на другой, вы, вероятно, сможете.
И вопрос в том ...