Selenium 网页抓取:如何在反应式网站上查找元素

时间:2021-05-16 15:15:51

标签: python selenium web-scraping

我的项目需要从网站获取一些信息,我想自动化这个过程,但我是实现这一目标的技术的初学者。

我在互联网上找到了这个 Python 库(Selenium),我认为它可能是一个解决方案。

我成功了第一步(接受 cookie,找到“访问”按钮并点击它)。单击“访问”按钮时出现问题。它显示了一个输入用户和密码的小表格,但我无法使用 driver.find_... 方法找到它们,所以我开始寻找 html 文档中的元素,它好像这个表单是在点击“接受”按钮后注入的。

有没有什么策略可以找到点击按钮后引入用户和密码的输入元素?

HTML code of the website without having clicked de "Access" button

HTML code after clicking on the "Access" button

谢谢

网站链接是:https://www.bbva.es/personas/experiencias/bbva-valora/analiza-vivienda.html

1 个答案:

答案 0 :(得分:0)

<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&amp;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()

要在单击接受弹出窗口和访问项后到达您想要的位置,您只需切换帧并发送密钥。