Fra*_*ank 5 python selenium text selenium-webdriver
我试图从这个页面获得元素"总价"的价值.
我的HTML看起来像这样:
<div class="data">
<div class="data-first">Ydelse pr. måned</div>
<div class="data-last">
<span class="total-price">[3.551 Kr][1].</span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
monthlyCost = driver.find_element_by_xpath("//span[@class='total-price']")
print monthlyCost.text
Run Code Online (Sandbox Code Playgroud)
奇怪的是财产存在于财产中.
但是,如果我尝试打印它或将其分配给一个对象,它就会变空.为什么?
当你调试它时,你实际上是在添加暂停并无意中等待页面加载.
此外,价格是通过额外的XHR请求动态加载的,并且具有中间"xxx"值,该值在加载过程中稍后用实际值代替.事情变得越来越复杂,因为有多个元素与total-price类,只有其中一个变得可见.
我会使用自定义的预期条件来处理它:
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
class wait_for_visible_element_text_to_contain(object):
def __init__(self, locator, text):
self.locator = locator
self.text = text
def __call__(self, driver):
try:
elements = EC._find_elements(driver, self.locator)
for element in elements:
if self.text in element.text and element.is_displayed():
return element
except StaleElementReferenceException:
return False
Run Code Online (Sandbox Code Playgroud)
工作代码:
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.leasingcar.dk/privatleasing/Citro%C3%ABn-Berlingo/eHDi-90-Seduction-E6G')
# wait for visible price to have "Kr." text
wait = WebDriverWait(driver, 10)
price = wait.until(wait_for_visible_element_text_to_contain((By.CSS_SELECTOR, "span.total-price"), "Kr."))
print price.text
Run Code Online (Sandbox Code Playgroud)
打印:
3.551 Kr.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1897 次 |
| 最近记录: |