python - Selenium 网页抓取:如何在响应式网站上查找元素
问题描述
我正在进行一个需要从网站获取一些信息的项目,我想自动化这个过程,但我是一个拥有实现这一目标的技术的初学者。
我在互联网上找到了这个用于 python 的库(Selenium),我认为它可能是一个解决方案。
我成功了第一步(接受 cookie,找到“访问”按钮并单击它)。单击“访问”按钮时出现问题。它显示了一个输入用户和密码的小表单,但我无法使用driver.find_...方法找到它们,所以我开始在 html 文档中查找元素,似乎这个表单是在之后注入的点击“接受”按钮。
有没有什么策略可以在点击按钮后找到用于介绍用户和密码的输入元素?
谢谢
网站链接为:https ://www.bbva.es/personas/experiencias/bbva-valora/analiza-vivienda.html
解决方案
<iframe class="iframe__base" title="People Login" id="tab-personas-iframe" width="100%" style="max-width: 100%; overflow: hidden; height: 384px;" src="/nimbus/login.html?conf=net/login&http_contactid=04a341b5-c0ce-454a-8854-be6b12299c9a" scrolling="no">Your browser does not support iframes</iframe>
您的元素位于 iframe 内。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait=WebDriverWait(driver, 40)
driver.get('https://www.bbva.es/personas/experiencias/bbva-valora/analiza-vivienda.html')
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".cookiesgdpr__acceptbtn.btn__basic.btn__medium-blue"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".header__actions__item__link.header__actions--menu.header__access"))).click()
所以这里你必须切换到iframe然后找到元素
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,"tab-personas-iframe")))
wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@data-testid='login-form-user']"))).send_keys("USER")
wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@data-testid='login-form-password']"))).send_keys("PASSWORD")
wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@data-testid='login-form-submit']"))).click()
要在单击接受弹出窗口和访问项后到达您想要的位置,您只需切换帧并发送密钥。
推荐阅读
- vue.js - 汇总生成的 vue 组件未作为自定义 vue 标签调用
- amazon-cognito - AWS Cognito 将自定义身份验证流与外部身份提供商一起使用
- ruby-on-rails - 我如何访问布尔值到rails中的其他控制器
- mongodb - 通过传递 id 列表基于嵌套 objectIds 检索 Mongo 文档
- java - 使用高级正则表达式拆分字符串
- javascript - Datatable 不加载 JSON 数据,显示消息“表中没有可用数据”
- android - 使用导航图范围注入视图模型:在 onCreate() 之前 NavController 不可用
- vue.js - 嵌入标签是否适用于 pdf 的 Vuejs 模板?
- javascript - 监听变化取决于嵌套的 UID
- postgresql - 使用 loopback4 计算每小时的订单数