【问题标题】:Unable to find element that looks like it's dynamically generated无法找到看起来像是动态生成的元素
【发布时间】:2023-02-15 07:30:50
【问题描述】:

我正在尝试查找位于以下 URL 中的电子邮件地址文本。您可以清楚地看到电子邮件地址,但我相信文本是通过 Javascript/React 动态生成的。当我复制 XPATH 或 CSS 选择器并尝试像查找任何其他元素一样查找该元素时,我只是收到一条错误消息,指出找不到该元素。

我已经尝试使用 time.sleep(30) 来让页面有时间完全加载,但这不是问题所在。

我试过了:

driver.find_element(By.XPATH, '//*[@id="mount_0_0_D8"]/div/div[1]/div/div[5]/div/div/div[3]/div/div/div[1]/div[1]/div/div/div[4]/div[2]/div/div[1]/div[2]/div/div[1]/div/div/div/div/div[2]/div[2]/div/ul/div[2]/div[2]/div/div/span')

您可以从下面的 sn-p 中看到电子邮件是可见的,但位于我以前从未见过的一些 ::before 和 ::after 文本之间。

https://www.facebook.com/homieestudio

关于如何在此处始终如一地撤回电子邮件地址的任何想法?我正在使用 Chromedriver。

【问题讨论】:

  • 您想与我们分享您的代码,以便我们了解发生了什么吗?
  • 添加了图像和我尝试过的代码,谢谢

标签: python selenium-webdriver selenium-chromedriver


【解决方案1】:

你可以使用下面的方法找到email地址

wait = WebDriverWait(driver, 20)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[@dir='auto'][contains(text(), 'info@homieestudio.co.uk')]")))

或者

wait = WebDriverWait(driver, 20)
element = wait.until(EC.presence_of_element_located((By.XPATH, "//span[@dir='auto'][contains(text(), 'info@homieestudio.co.uk')]")))

进口

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

【讨论】:

  • 谢谢,如果电子邮件地址未知,我是否可以将“info@homieestudio.co.uk”更改为“@”之类的内容,这样会拉回页面上带有@符号的任何文本?我猜想在页面的其他地方撤回电子邮件地址可能会遇到问题?
【解决方案2】:

线索是,电子邮件地址将始终具有 **@** 标志。


解决方案

提取文本Info@homieestudio.co.uk理想情况下,您需要为 visibility_of_element_located() 引入 WebDriverWait,您可以使用以下任一 locator strategies

  • 使用XPATH文本属性:

    driver.get('https://www.facebook.com/homieestudio')
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., '@')]"))).text)
    
  • 使用XPATHget_attribute("textContent")

    driver.get('https://www.facebook.com/homieestudio')
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., '@')]"))).get_attribute("textContent"))
    
  • 控制台输出:

    Info@homieestudio.co.uk
    
  • 笔记:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多