【问题标题】:Selenium web scraping: How to find an element on a reactive websiteSelenium 网页抓取:如何在响应式网站上查找元素
【发布时间】:2021-05-16 15:15:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你能提供那个网页的链接吗?
  • bbva.es/personas/experiencias/bbva-valora/analiza-vivienda.html 是一个评估房子价格的银行网站。我有用户名和密码,但是当我尝试查找 ID 为“user”和“password”的输入元素以应用 sendKeys 方法时,我找不到这个输入元素,但我可以在 chrome 检查器上轻松找到它们
  • 抱歉标签是名字,不是id

标签: python selenium web-scraping


【解决方案1】:
<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()

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

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2021-09-25
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2023-01-25
    • 2020-06-21
    • 2019-02-05
    • 2019-05-09
    相关资源
    最近更新 更多