Selenium + Python: 打印 CssSelector 定位的元素的文本

Selenium + Python: Print text of an element located by CssSelector

我是 Selenium 和 Python 的新手。 我想浏览一个网站,找到一个元素并打印它(或将它存储在 csv 文件中)。

Python版本:3.10; Selenium Webdriver:Firefox; IDE: PyCharm 2021.3.2 (CE); OS:Fedora 35 虚拟机

到目前为止,我能够导航到生成 table 的相应页面。当我通过 CSS 选择器定位元素并尝试打印它时,输出不会打印我在屏幕上看到的文本“$10.50”。事实上,它不打印任何东西。

HTML 我要打印的元素代码:

<input id="b8-b36-Input_RemainAmtYr1" class="form-control OSFillParent" data-input="" disabled="" type="text" style="margin-top: 5px;" value=".50">
event

我的相关代码:

RemainDue = driver.find_element(By.CSS_SELECTOR, '#b8-b36-Input_RemainAmtYr1')
print ('Remaining Due:', RemainDue.text)

我希望输出为“$10.50”,这是我在屏幕和 HTML 中看到的。相反,我得到以下信息:

Remaining Due:

“剩余到期:”后没有打印任何内容 我认为问题在于“$10.50”可能是由某种 javascript 生成的,但我可以在上面的 HTML 代码中看到我想打印的文本“$10.50”。 我做错了什么?

要打印 value 属性的值,即 $10.50 您可以使用以下任一方法以下 :

  • 使用css_selector:

    print(driver.find_element_by_css_selector("input.form-control.OSFillParent[id$='Input_RemainAmtYr1']").get_attribute("value"))
    
  • 使用xpath:

    print(driver.find_element_by_xpath("//input[@class='form-control OSFillParent' and contains(@id, 'Input_RemainAmtYr1')]").get_attribute("value"))
    

理想情况下你需要诱导 WebDriverWait for the and you can use either of the following :

  • 使用CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.form-control.OSFillParent[id$='Input_RemainAmtYr1']"))).get_attribute("value"))
    
  • 使用XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@class='form-control OSFillParent' and contains(@id, 'Input_RemainAmtYr1')]"))).get_attribute("value"))
    
  • 注意:您必须添加以下导入:

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

You can find a relevant discussion in