Щелчок по выбранному элементу в python selenium не работает с использованием WebDriverWait / EC / способом

Это документ, за которым я следую 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 27.05.2018 11:57

почему первое не работает?

ishandutta2007 27.05.2018 12:37

@Andersson Я обновил вопрос, надеюсь, теперь вы можете отозвать свой закрытый запрос.

ishandutta2007 27.05.2018 12:41

ОК. Можете ли вы теперь уточнить, почему вы хотите щелкнуть iframe, а не конкретный элемент внутри iframe?

Andersson 27.05.2018 12:44

Я хочу щелкнуть определенный элемент внутри, но более поздний способ, который в некоторой степени работает для меня, я обнаружил, что это лучшее, что я могу сделать для проблемы stackoverflow.com/questions/25670336/…

ishandutta2007 27.05.2018 12:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Iframe - это узел основной модели DOM. После вызова driver.switch_to_frame(captcha_iframe) вы переключились на DOM iframes, и узел, расположенный с помощью By.XPATH, iframe_xpath, больше не доступен.

Таким образом, он должен быть по-прежнему доступен из основного DOM, если пропустить строку driver.switch_to_frame(captcha_iframe)

это не проблема. эй, извини, можешь проверить, я обновил его снова, чтобы решить эту путаницу.

ishandutta2007 27.05.2018 12:45

Нет. Это проблема. Обратите внимание, что во втором коде вы не переключаетесь на iframe. Просто добавьте driver.switch_to_frame(captcha_iframe), и ваш второй код тоже не сработает.

Andersson 27.05.2018 12:48

не эквивалент action.move_to_element(captcha_iframe)?

ishandutta2007 27.05.2018 12:49

Точно нет! Позволяет выполнять наведение мышки на нужный элемент.

Andersson 27.05.2018 12:50

понял, отлично, он работает, когда я нажимаю на элемент внутри него. но как это получается, когда у нас есть developer.mozilla.org/en-US/docs/Web/Security/….

ishandutta2007 27.05.2018 13:04

Я предполагаю, что переключение помогает, вы не можете получить доступ к двум доменам вместе, но как только вы переключите драйвер, чтобы он указывал на другой, вы, вероятно, сможете.

ishandutta2007 27.05.2018 13:07

Другие вопросы по теме