如何使用selenium Python获取html的span数据绑定部分中的文本?

如何使用selenium Python获取html的span数据绑定部分中的文本?,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,这是我试图使用Python Selenium从web上抓取的html片段 我正在尝试将文本添加到span数据绑定中的包中 当我迭代这些instock_元素时 这些给了我一些随机值,比如6489355d-9dd3-4d77-a0d7-b134ce48fae7,但不是添加到包中的文本。请特别尝试xpath: 身份证 selenium使用的内部ID 这主要是内部使用。简单的用例,比如检查 2个webelements引用相同的元素,可以使用==: 如果element1==element2: 这两个是相等

这是我试图使用Python Selenium从web上抓取的html片段

我正在尝试将文本添加到span数据绑定中的包中

当我迭代这些instock_元素时


这些给了我一些随机值,比如6489355d-9dd3-4d77-a0d7-b134ce48fae7,但不是添加到包中的文本。

请特别尝试xpath:

身份证

selenium使用的内部ID

这主要是内部使用。简单的用例,比如检查 2个webelements引用相同的元素,可以使用==:

如果element1==element2: 这两个是相等的

改为使用value.get_attributeid获取id

要获取文本,请使用:

value.text

如果失败,请使用:

value.get_attribute("textContent")
作为value.text仅检索UI中显示的文本,您也可以使用BeautifulSoup:

from bs4 import BeautifulSoup

html = """<div class="is-add-item-saving" data-bind="visible: isBusy" style="display: none;"></div>
<span class="aria-live" aria-role="status" aria-live="polite" data-bind="{ text: ariaLiveText }"></span>
<button data-bind="click: addToBag, css : buttonCss, attr: { 'aria-label': resources.pdp_cta_add_to_bag, disabled: isBusy }, markAndMeasure: 'pdp:add_to_bag_interactive'" data-test-id="add-button" aria-label="Add to bag">
    <span class="product-tick" data-bind="visible: showProductTick" style="display: none;"></span>
    <span data-bind="text: buttonText">Add to bag</span>
</button>"""

soup = BeautifulSoup(html)

tag = soup.find('span',{'data-bind':'text: buttonText'})
print(tag.text)
要打印文本“添加到行李”,您可以使用以下任一选项:

使用css_选择器和get_attributeinnerHTML:

使用xpath和文本属性:

print(driver.find_element_by_xpath("//button[@data-test-id='add-button' and @aria-label='Add to bag']//span").text)
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button[data-test-id='add-button'][aria-label='Add to bag'] span"))).text)
理想情况下,您需要对所定位的元素的可见性进行归纳,并且您可以使用以下任一项:

使用CSS_选择器和文本属性:

print(driver.find_element_by_xpath("//button[@data-test-id='add-button' and @aria-label='Add to bag']//span").text)
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button[data-test-id='add-button'][aria-label='Add to bag'] span"))).text)
使用XPATH和get_属性:

print(driver.find_element_by_xpath("//button[@data-test-id='add-button' and @aria-label='Add to bag']//span").text)
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button[data-test-id='add-button'][aria-label='Add to bag'] span"))).text)
注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以在中找到相关的讨论

工具书类 链接到有用的文档:

方法获取元素的给定属性或属性。 属性返回元素的文本。
如果你很难找到合适的元素, 简单的方法是查找与xpath关联的, 必须使用单个标记的完整xpath,然后使用.text获取其文本

例如:
text=driver.find_element_by_xpath元素的完整xpath。text

无需混合使用beautifulSoup和内置selenium函数。这是两种不同的工具,它们是两种不同的工具。但它们有一个共同的目的:解析DOM。Selenium已经在findElements和find中实现了这一点。当您使用requests模块并且需要一个从文本解析的工具时,我看到了更多关于BS的内容。这两种工具的结合使用对我来说绝对相关,我不同意。我希望看到一个例子,说明使用这两种工具是有意义的。你的实际问题是什么?这应该会成功,因为您使用了正确的xpath来获取跨度及其文本。
print(driver.find_element_by_xpath("//button[@data-test-id='add-button' and @aria-label='Add to bag']//span").text)
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button[data-test-id='add-button'][aria-label='Add to bag'] span"))).text)
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//button[@data-test-id='add-button' and @aria-label='Add to bag']//span"))).get_attribute("innerHTML"))
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC