import sys sys.path.append("/home/user/.local/lib/python3.9/site-packages") #将包的路径添加到环境变量 import asyncio from pyppeteer import launch from pyppeteer.errors import TimeoutError from pyppeteer_stealth import stealth #反检测模块,隐藏浏览器特征 width,height = 1366,768 async def main(): brower = await launch({"executablePath":"/opt/browser360/browser360-cn"}, #指定已安装的浏览器, headless = False,#无界面模式关闭,显示界面 args = ["--disable-infobars",f"--window-size={width},{height}"],#关闭提示”Chrome 正受到自动测试软件的控制”,设定界面大小 #devtools = True,#打开调试模式,如果这个参数设置为 True,那么 headless 参数就会无效,会被强制设置为 False ) page = await brower.newPage() #打开一个新的标签页 await stealth(page) #反检测模块,隐藏特征 await page.setViewport({"width":width,"height":height}) #界面大小 try: await page.goto("https://spa6.scrape.center/") await page.evaluate("""() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }""") #使用 JavaScript 将它设置为false,规避webdriver检测 await page.waitForSelector(".item .name", options={'timeout': 20 * 1000}) #等待符合 .item .name 的节点加载出来,最长等待 20 秒 await page.waitForSelector("h2", options={'timeout': 20 * 1000}) # 等待符合 h2 的节点加载出来,最长等待 20 秒 except TimeoutError: print("TimeoutError") print(await page.querySelectorAllEval('.item .name', 'nodes => nodes.map(node => node.href)')) #链接href,class为name """调用了 querySelectorAllEval 方法,它接收两个参数,第一个参数是 selector ,代表要选择的节点对应的 CSS 选择器;第二个参数是 pageFunction , 代表的是要执行的 JavaScript 方法,这里需要传入的是一段 JavaScript 字符串,整个方法的作用是选择 selector 对应的节点, 然后对这些节点通过 pageFunction 定义的逻辑抽取出对应的结果并返回。由于提取结果有多个,所以这里 JavaScript 对应的 pageFunction 输入参数就是 nodes , 输出结果是调用了 map 方法得到每个 node ,然后调用 node 的 href 属性即可。这样返回结果就是当前列表页的所有电影的详情页 URL 组成的列表了。""" print(await page.querySelectorEval('h2', 'node => node.innerText')) #单个节点,第一个节点的文本值 print(await page.querySelectorAllEval('h2', 'nodes => nodes.map(node => node.innerText)')) #多个节点,文本值,名称 h2 节点 print(await page.querySelectorAllEval('.cover', 'nodes => nodes.map(node => node.src)')) # 多个节点,src,封面class为cover await brower.close() asyncio.get_event_loop().run_until_complete(main())
原界面;
原界面有很多条:
输出:
标签:node,await,Python,pyppeteer,节点,简单,print,nodes,page From: https://www.cnblogs.com/shan-gui-yao/p/18308980