html - 使用 selenium 抓取网页时缺少 HTML 内容

我正在尝试从网站上获取产品的 Markdown 信息。

检查网站时,HTML 看起来像这样:

我的代码是这样的:

browser = webdriver.Chrome(executable_path='/chromedriver.exe') 
browser.get('https://www.mydays.de/magicbox/kurzurlaub')
soup = BeautifulSoup(browser.page_source, 'html.parser')
Price = soup.find('div',{"class":"c-mbvoucher__pricebox"})

但是我的结果是这样的:

<div class="c-mbvoucher__pricebox">
<span class="c-mbvoucher__price">159 €</span>
<span class="c-mbvoucher__person">
            für 2 Personen        </span>
</div>

为什么我的结果中缺少一些信息?

我也试过find_all,但是上面是唯一匹配的。

最佳答案

要提取文本 159 €,您可以使用以下任一项 Locator Strategies :

  • 使用 css_selector:

    print(driver.find_element_by_css_selector("div.c-mbvoucher__pricebox>span.c-mbvoucher__price"))
    
  • 使用 xpath:

    print(driver.find_element_by_xpath("//div[@class='c-mbvoucher__pricebox']/span[@class='c-mbvoucher__price']"))
    

理想情况下,定位你需要诱导的元素WebDriverWait对于 visibility_of_element_located(),您可以使用以下任一项 Locator Strategies :

  • 使用 CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.c-mbvoucher__pricebox>span.c-mbvoucher__price"))).get_attribute("innerHTML"))
    
  • 使用 XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='c-mbvoucher__pricebox']/span[@class='c-mbvoucher__price']"))).text)
    
  • 控制台输出:

    159 €
    
  • 注意:您必须添加以下导入:

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

更新

如果您的用例是提取文本 119,25 €,因为该文本位于 Text Node 中,您可以使用以下任一方法以下解决方案:

  • 使用 CSS_SELECTOR:

    print(driver.execute_script('return arguments[0].firstChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.c-mbvoucher__pricebox")))).strip())
    
  • 使用 XPATH:

    print(driver.execute_script('return arguments[0].firstChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='c-mbvoucher__pricebox']")))).strip())
    
  • 控制台输出:

    119,25 €
    

https://stackoverflow.com/questions/64986751/

相关文章:

react-native - React Native 中未生成短动态链接

kotlin - block 注释内引号中的结束标记

angular - 生成 Angular 库时的循环依赖

flutter - SuffixIcon 不适用于 AutoCompleteTextField

docker - 多平台 Docker 内部网络从主机连接

visual-studio - Visual Studio 2019 安装问题

unity3d - Rigidbody AddForce 在 Photon Unity 中不起作用

kubernetes - Operator SDK Controller 无法更新自定义资源状态

javascript - 如何使 vuetify 复选框仅在单击框而不是标签时使用react?

c# - 复杂的 Json 到 C# 对象反序列化类