python - 使用 WebDriverWait/EC/by 方式单击 python selenium 中的选定元素不起作用
问题描述
这是我关注的文档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 并且位于 byBy.XPATH, iframe_xpath
的节点不再可访问。
driver.switch_to_frame(captcha_iframe)
因此,如果跳过行,它应该仍然可以从主 DOM 访问
推荐阅读
- javascript - 每次在 Rails 中由 Vanilla Javascript 加载部分时查询选择元素
- oauth-2.0 - 试图了解 Firebase 身份验证每个电子邮件地址和受信任的提供商一个帐户
- amazon-web-services - 使用 aws STS 获取临时凭证:Web 身份令牌在哪里?
- swift - 是否可以使用扩展在通知中显示谷歌地图
- python - 如何查找数组中匹配元素的索引?
- r - 提取一列中具有重复条目的行,满足另一列中的给定条件
- reactjs - 从我停止的那一刻起反应如何恢复计数器
- flutter - 将默认 TextFormField 的图标颜色从灰色更改为任何颜色,但在选择时显示原色
- python - Numpy:计算变量数不定的函数输出矩阵的优雅解决方案
- configuration - Eclipse RCP 产品配置未添加所有必需的插件