【问题标题】:How to extract a part of the web page source using Selenium and webdriver?如何使用 Selenium 和 webdriver 提取网页源的一部分?
【发布时间】:2020-04-23 13:50:16
【问题描述】:

我想提取网页源的一部分。现在我可以提取所有 html 代码并输出正确的代码。但是,我只想提取一部分代码。

下面是他们的html代码,我要爬取。我只想抓取红色范围:

然后,下面是我的python代码:

    from datetime import date,datetime
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from bs4 import BeautifulSoup
    from selenium.webdriver.support.ui import Select
    from selenium.common.exceptions import NoSuchElementException
    import numpy as np
    import xlrd
    import csv
    import codecs
    import time
    import os

        driver_blank=webdriver.Chrome('./chromedriver')
        driver_blank.get('https://forumd.hkgolden.com/view.aspx?type=CA&message=7223327')
        time.sleep(1)
        try_value = 1
        while(try_value):
            try:
                driver_blank.find_element_by_xpath('/html/body/form/div[5]/div/div/div[2]/div[1]/div[5]/table[2]')
                print('OK')
                try_value=0
            except NoSuchElementException as e:
                print('Refreash now')
                driver_blank.refresh()
                time.sleep(10)
        html_code = driver_blank.page_source
        print(html_code)

我可以使用完整的 Xpath 来定位这个范围吗?

【问题讨论】:

  • 为什么不用类来获取网格呢?
  • 因为我需要在同一个页面爬很多相同的类名

标签: html python-3.x selenium selenium-chromedriver


【解决方案1】:

如果要获取grid html需要先识别grid element再使用 get_attribute("outerHTML")

诱导WebDriverWait()并等待visibility_of_element_located()

代码

driver.get("https://forumd.hkgolden.com/view.aspx?type=CA&message=7223327")
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"(//div[@class='ContentGrid'])[1]")))
print(driver.find_element_by_xpath("(//div[@class='ContentGrid'])[1]").get_attribute("outerHTML"))

您需要添加以下库。

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

【讨论】:

  • outerHtml 也包含网格标签。 innerHTML 不是官方的 DOM 属性,但大多数浏览器都支持,并且只返回元素的内容。
  • @Justlearnedit :正确。我猜 OP 想要 html 而不是标签内的内容。
  • 其实我必须使用完整的xpath。我改成全路径还是成功爬取了信息。谢谢~~~
猜你喜欢
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2020-04-13
  • 2012-07-13
  • 2012-06-06
  • 2018-09-20
相关资源
最近更新 更多