python - 如何使用python,selenium单击框架内的按钮?
问题描述
我正在尝试通过 Python 单击 Facebook“更改密码”安全设置中的“编辑”按钮。
# logs in to facebook
browser = webdriver.Chrome(executable_path='/path/to/webdriver')
# Navigate to Facebook
browser.get("http://www.facebook.com")
browser.maximize_window()
# Search & Enter the Email or Phone field & Enter Password
username = browser.find_element_by_id("email")
username.send_keys("email@gmail.com")
password = browser.find_element_by_id('pass')
password.send_keys('password')
submit = browser.find_element_by_name('login')
submit.click()
print("logged in")
time.sleep(5)
# navigates to security
browser.get("http://www.facebook.com/settings?tab=security")
time.sleep(3)
我对此完全陌生,但这段代码到目前为止运行,并登录到 facebook 页面,并进入安全设置。但是,我不知道如何单击该按钮。使用 Inspect,我找不到 ID,经过大量谷歌搜索,我认为这可能是 Frames 的问题?任何意见将是有益的!
解决方案
该元素在 an 内,<iframe>
因此您必须:
诱导WebDriverWait使所需的帧可用并切换到它。
诱导WebDriverWait使所需元素成为可点击的。
您可以使用以下任一定位器策略:
使用
XPATH
:browser.get("http://www.facebook.com/settings?tab=security") WebDriverWait(browser, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@src, 'https://www.facebook.com/settings?tab=security')]"))) WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[.//span[text()='Change password']]//following-sibling::td[1]/button"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到一些相关的讨论:
推荐阅读
- vb.net - 每个 .Net 项目有多少个 VB.net System.Timers.Timers?
- excel - 如何在工作表中搜索现有的命令按钮?
- constraints - 约束方法
- json - 在 API Post 方法中引用相关资源
- r - 我的公平骰子模拟不会输出 1 到 6 之间的 10 个随机数
- postgresql - 从 postgresql 中的两个值中查找 %
- php - SQLSTATE [23000]:完整性约束违规:1062 Symfony 4 中的重复条目
- elasticsearch - 如何通过弹性搜索中的特定值查找具有多个字段的内部对象的对象
- vb6 - 将范围参数传递给 Crystal 对象
- php - 如何为没有 docker 的开发人员在本地模拟弹性 beanstalk 环境?