更改为 iframe
Change to iframe
在 gmx.net 我想点击电子邮件中的超链接。
但是超链接包含在两个 iframe 中。
如何换成它?
我的做法:
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@class="app-stack_children--active"]')))
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@class="js-box-flex need-overlay"]')))
正如我所怀疑的,您的 XPath 不正确。
您必须使用
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@class='app-stack__children l-vertical app-stack__children--active']')))
或
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[contains(@class, 'app-stack_children--active']')))
显然,第一个选项比第二个选项好。 contains()
总是有可能匹配多个元素。如果使用相等,则可能性较小。
在 gmx.net 我想点击电子邮件中的超链接。
但是超链接包含在两个 iframe 中。
如何换成它?
我的做法:
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@class="app-stack_children--active"]')))
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@class="js-box-flex need-overlay"]')))
正如我所怀疑的,您的 XPath 不正确。
您必须使用
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@class='app-stack__children l-vertical app-stack__children--active']')))
或
WebDriverWait(driver, 10).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[contains(@class, 'app-stack_children--active']')))
显然,第一个选项比第二个选项好。 contains()
总是有可能匹配多个元素。如果使用相等,则可能性较小。