使用pyppeteer爬取qq音乐时报错

我想爬取qq音乐的音乐网址,但当我把headless设为True时,程序就会报一下错误:
video_link = await video_link.getProperty('src')
AttributeError: 'NoneType' object has no attribute 'getProperty'
在headless=False时可以运行。
请问可以用什么方法解决呢?

# 导入asyncio模块
import asyncio
# 导入pyppeteer
import pyppeteer
import win32gui, win32con
# 使用async关键字定义异步函数:
from pyppeteer_stealth import stealth

async def main(url,song):
    # 打开浏览器
    browser = await pyppeteer.launch(
            headless=True,
        # 设置浏览器界面尺寸
        args=['--window-size=1366,768'],
        # 设置页面尺寸
        defaultViewport={'width': 1366, 'height': 688}
    )
    page = await browser.newPage()
    await stealth(page)
    await page.goto(url)
    await asyncio.sleep(2)
    await page.click('.icon_search.sprite')
    pages = await browser.pages()
    page = pages[-1]
    await asyncio.sleep(2)
    await page.click('.yqq-dialog-close')
    await page.click('.yqq-dialog-close')
    await asyncio.sleep(2)
    await page.click('.search_input__input')
    await page.keyboard.down('Control');
    await page.keyboard.press('KeyA');
    await page.keyboard.up('Control');
    await page.keyboard.press('Backspace');
    await asyncio.sleep(2)
    await page.type('.search_input__input',song)
    await asyncio.sleep(2)
    await page.click('.search_input__input')
    await page.click('.search_result__link')

    await asyncio.sleep(2)
    pages = await browser.pages()
    page = pages[-1]
    await page.click('.mod_btn_green')
    await asyncio.sleep(3)
    pages = await browser.pages()
    page = pages[-1]

    global video_link
    video_link = await page.querySelector('body > audio')

    video_link = await video_link.getProperty('src')
    video_link = await video_link.jsonValue()

    await browser.close()

url = "https://y.qq.com/"
song=input()
# 使用get_event_loop()创建异步事件循环
loop = asyncio.get_event_loop()
# 使用run_until_complete()运行异步事件循环
loop.run_until_complete(main(url,song))
print(video_link)
# 关闭异步事件循环
loop.close()



以下内容引用自GPT,有用望采纳:

在你的代码中,当将headless设置为True时,程序报错AttributeError: 'NoneType' object has no attribute 'getProperty'。这个错误是由于在以下代码行中,video_link的值为None,无法调用getProperty方法:

video_link = await video_link.getProperty('src')

这可能是因为在使用page.querySelector('body > audio')时,无法找到对应的元素导致的。当headless设置为False时,程序能够运行,这可能是因为在可视化界面下,元素能够被正确地加载和获取。

解决这个问题的方法是,调试代码,确认所选的音频元素是否正确。你可以使用page.evaluate方法来执行JavaScript代码,以检查页面上的元素。

修改以下代码行:

video_link = await page.querySelector('body > audio')

为:

video_link = await page.querySelector('audio')

上述代码使用了更简单的选择器来定位<audio>元素。如果元素被正确地选择,则可以继续执行后续的操作。

另外,建议在等待页面加载完成后再执行操作,而不是使用固定的等待时间。可以使用page.waitForSelector等方法,根据具体的元素选择器等待元素的出现。

希望以上解释能帮助到你,如果还有其他问题,请随时提问。