繁体   English   中英

使用 Python 时是否可以获得 selenium 无头镀铬 XHR 响应 3

[英]is it possible to get the selenium headless chrome XHR response when using Python 3

我正在使用 selenium google chrome headless 来捕获一些内容,我试图做的是解析 web 页面源代码并获取我想要的数据列表。 我必须编写一些解析 html 和 css 代码来获得我想要的内容。 像这样的代码:

    @staticmethod
    def fetch_music_download_url_impl(music_name: str):
        chrome_driver_service = Service(ChromeDriverManager(chrome_type=ChromeType.GOOGLE).install())
        chrome_options = Options()
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--disable-gpu")
        chrome_options.add_argument("--remote-debugging-port=9230")
        driver = webdriver.Chrome(service=chrome_driver_service,
                                  options=chrome_options,
                                  executable_path="/usr/local/bin/chromedriver")
        try:
            driver.maximize_window()
            driver.get('http://example.cn/music/?page=audioPage&type=migu&name=' + music_name)
            driver.implicitly_wait(5)
            driver.find_element(By.CSS_SELECTOR, ".aplayer-list-download.iconfont.icon-xiazai").click()
            urls = [a.get_attribute('href') for a in
                    driver.execute_script('return document.querySelectorAll(".modal-body a[href*=\'http\']")')]
            for url in urls:
                if "listenSong.do" in url:
                    logger.info("fetched url:" + url)
                    FetchMusic.do_save_music_download_url(url)
        except Exception as e:
            logger.error("scrapy impl error", e)
        finally:
            driver.stop_client()
            driver.close()
            driver.quit()
            chrome_driver_service.stop()

这段代码有效,这只是一个演示,如果我想让它更完美,我必须编写更多的代码来匹配数据。 我想知道是否可以使用我想要获得的 json 内容来获得 google chrome 无头 XHR 响应内容。 所以我可以做更简单的步骤,只需解析 json 响应。 这样会更简单可靠,节省资源。

我应该怎么做才能获得谷歌浏览器无头 XHR json 响应?

我正在使用selenium-wire这样做:

from seleniumwire import webdriver

然后使用此代码:

    @staticmethod
    def fetch_search_xhr_response(driver: any):
        for request in driver.requests:
            if request.response and r'api/search' in request.url:
                if request.response.status_code == http.client.OK:
                    search_response = request.response.body
                    json_response = json.loads(search_response)
                    if json_response["code"] == http.client.OK:
                        FetchMusic.handle_music_list(json_response["data"])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM