Python + Selenium:我无法从div

时间:2019-09-14 14:47:47

标签: python selenium selenium-webdriver selenium-chromedriver

Python + Selenium:我无法从该div获取打印文本:

<div id="modal-content-18" class="modal-content" data-role="content">
    <div>
    SignUp Failed. Please Try Again.
    </div>
</div>

我尝试过:

resp = browser.find_element_by_class_name("modal-content").text
print resp

但这不起作用。

请帮助我。

3 个答案:

答案 0 :(得分:1)

由于这种情况,我个人更喜欢xpaths。他们也可以处理许多复杂的案件。请尝试以下操作:

resp = browser.find_element_by_xpath('//div[@class="modal-content"]/div').text
print resp

如果元素在屏幕上不可见。文本方法将为none。在这种情况下,您需要textContent属性。然后使用以下内容:

resp = browser.find_element_by_xpath('//div[@class="modal-content"]/div').get_attribute("textContent")
print resp

让我知道它是否对您有用。另外,请确保页面上只有一个modal-content。如果有多个,则您的css_selector不足以标识此元素。要检查这一点,您可以运行以下命令。

l = len(browser.find_elements_by_xpath('//div[@class="modal-content"]/div'))
print l

如果返回的数字大于1,则仅modal-content类是不够的,您将需要扩展选择条件。

答案 1 :(得分:0)

引发 WebDriverWait visibility_of_element_located(),并遵循定位器策略。

使用CLASS_NAME

print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CLASS_NAME,"modal-content"))).text)

使用XPATH

print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='modal-content' and @data-role='content']"))).text)

您需要导入以下内容。

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

已编辑 检查textContent属性值。

print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CLASS_NAME,"modal-content"))).get_attribute("textContent"))

OR

print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='modal-content' and @data-role='content']"))).get_attribute("textContent"))

答案 2 :(得分:0)

所需的文本注册失败。请重试。位于子项<div>中,因此您必须为所需的visibility_of_element_located()引入 WebDriverWait ,并且可以使用以下{{3} }:

  • 使用CSS_SELECTOR

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.modal-content[id^='modal-content-'][data-role='content']>div"))).get_attribute("innerHTML"))
    
  • 使用XPATH

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='modal-content' and starts-with(@id, 'modal-content-')][@data-role='content']/div"))).text)
    
  • 注意:您必须添加以下导入:

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

您可以在Locator Strategies

中找到相关的讨论

Outro

根据文档: