使用python和selenium webdriver创建样式显示设置为“无”的元素

2024-09-29 21:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想浏览一个网站,以便在我的国家的医院安排医疗预约,为此,我使用以下代码:

from selenium import webdriver

d = webdriver.Chrome()
d.get("http://www.mojtermin.mk/map/spetsijalist?specialty=meditsinska_genetika&location=grad_skopje&clinic=jzu_uk_za_ginekologija_i_akusherstvo&resource=873745910")
d.maximize_window()
d.implicitly_wait(20)
d.find_element_by_id('cdk-describedby-message-0').text
termins = d.find_element_by_id(id_='cdk-describedby-message-0').text

print(termins)

当我运行代码时,Chrome成功打开并显示了网站,但通过id查找元素,并没有返回任何内容,只有空字符串

当我检查铬合金中的该元素时,我发现:

<div id="cdk-describedby-message-container" aria-hidden="true" style="display: none;"><div id="cdk-describedby-message-0">Нема слободни термини во наредните 3 месеци.</div></div>

我希望通过元素的返回值查找元素,在本例中为:“3”

我尝试了许多不同的方法,但每次我得到空字符串或找不到元素

注: 价值翻译:“未来3个月内没有免费时间表”


Tags: 代码textdivid元素messageby网站
3条回答

get_attribute("textContent")代替text

诱导WebDriverWait()并等待presence_of_element_located()和下面的css选择器

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

d=webdriver.Chrome()
d.get("http://www.mojtermin.mk/map/spetsijalist?specialty=meditsinska_genetika&location=grad_skopje&clinic=jzu_uk_za_ginekologija_i_akusherstvo&resource=873745910")
d.maximize_window()
print(WebDriverWait(d,20).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#cdk-describedby-message-container>#cdk-describedby-message-0"))).get_attribute("textContent"))

输出:

Нема слободни термини во наредните 3 месеци.

文本为Нема слободни термини во наредните 3 месеци.的元素位于父<div>元素中,其style属性设置为display: none;

因此,由于元素在网页上不可见,Selenium将无法以通用方式与WebElement交互

但是,有几种方法可以提取文本,如下所示:

  • 使用CSS_SELECTOR

    print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div#cdk-describedby-message-0"))).get_attribute("innerHTML"))
    
  • 使用XPATH

    print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[@id='cdk-describedby-message-0']"))).get_attribute("innerHTML"))
    
  • 使用document.getElementById文本内容

    print(driver.execute_script("return document.getElementById('cdk-describedby-message-0').textContent;"))
    
  • 控制台输出:

    Нема слободни термини во наредните 3 месеци.
    
  • 注意:您必须添加以下导入:

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

您要查找的<div>被另一个样式属性为display: none<div>重叠。您应该使用java脚本来获取文本。使用方法如下:

termins = d.execute_script("return   document.getElementById(\"cdk-describedby-message-0\").innerHTML;")

输出

enter image description here

相关问题 更多 >

    热门问题