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
我是 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
使用
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