嗯,我的问题是这个。我想使用 python 和 selenium 从网页中收集数据,这是我需要从中获取数据的 html
<div class="order-detail order-price">
<div>
<p class="item-left text--semibold">
Subtotal
</p>
<p class="item-right text--semibold">$1420.00</p>
</div>
</div>
<我需要的数据是来自最后一个“p”元素的内部文本,即数字。我可以将 Xpath 用于特定的,但这是在一个 ul elemten 中,它有很多 li 元素,在那些 li 中,你有那个 div 代码。
问题是每个 li 中该 div 的 Xpath 都会发生变化,因为我可以在该特定之前拥有或多或少的 div,所以我无法使用 Xpath,我没有 ID、名称和类名对于所有其他 div,我的程序无法抓取一个特定的。此外,我需要一个一个地抓取,以便我可以订购它们,因为每隔一段时间我必须收集另一个特定的 div 并将该数据保存在同一位置。 这是我目前的代码
ul_principal = driver.find_element_by_xpath('/html/body/main/div[5]/section/div/div/div/div/ul/li[2]/div/div/div[1]/div[4]/ul[2]')
li_options = ul_principal.find_elements_by_tag_name('li')
for li in li_options:
driver.implicitly_wait(100)
li.click()
div_Subtotal = li.find.element_by_class_name("order=detail order-price")
if div_Subtotal is not None:
div_Subtotal.find_element_by_class_name("item-right text--semibold").get_property('innerText')
我使用 li.click() 来知道我是否可以在 li 内旅行,这有效,但我无法获取信息。 我不能给你这个网页,因为它有密码而且是私密的
答案 0 :(得分:0)
尝试类似 BS4.find(class_ = "order-detail order-price").find("p", {"class": "item-right"}).text
答案 1 :(得分:0)
要提取和打印文本 $1420.00,您可以使用以下任一 Locator Strategies:
使用 css_selector
和 get_attribute()
:
print(driver.find_element_by_css_selector("ul li div.order-detail.order-price p.item-right.text--semibold").get_attribute("innerHTML"))
使用 xpath
和 text 属性:
print(driver.find_element_by_xpath("//ul//li//div[@class='order-detail order-price']//p[@class='item-right text--semibold']").text)
理想情况下,您需要为 visibility_of_element_located()
引入 WebDriverWait,并且您可以使用以下任一 Locator Strategies:
使用 CSS_SELECTOR
和 text 属性:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "ul li div.order-detail.order-price p.item-right.text--semibold"))).text)
使用 XPATH
和 get_attribute()
:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//ul//li//div[@class='order-detail order-price']//p[@class='item-right text--semibold']"))).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
您可以在 How to retrieve the text of a WebElement using Selenium - Python
中找到相关讨论链接到有用的文档:
get_attribute()
方法 Gets the given attribute or property of the element.
text
属性返回 The text of the element.