【Python】pyppeteer简单使用
爬取百度搜索python的第一页标题
import sys sys.path.append("/home/user/.local/lib/python3.9/site-packages") #将包的路径添加到环境变量 import asyncio from pyppeteer import launch from pyppeteer_stealth import stealth #反检测模块,隐藏浏览器特征 import random width,height = 1366,768 async def main(): brower = await launch({"executablePath":"/opt/browser360/browser360-cn"}, #指定已安装的浏览器, headless = False,#无界面模式关闭,显示界面 userDataDir = "./userdata", #设置用户目录 userDataDir,可以恢复之前的历史记录,也可以恢复很多网站的登录信息 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}) #界面大小 await page.goto("https://www.baidu.com/") await page.evaluate("""() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }""") #使用 JavaScript 将它设置为false,规避webdriver检测 await page.type('input#kw.s_ipt', "python") #搜索python #id为kw的input节点,其内部class为s_ipt的节点 await asyncio.sleep(random.random() * random.randint(3, 5)) await page.click('input#su') # 点击搜索按钮 #id为su的input节点 await asyncio.sleep(random.random() * random.randint(3, 5)) await page.evaluate('window.scrollBy(0, window.innerHeight)') # 向下滑动滚动条 title_element = await page.Jx('//*//h3/a') # 提取搜索结果第一页的标题 # 清空input输入框的关键词,防止关键词累加 await page.evaluate('document.querySelector("input[id=kw]").value=""') await asyncio.sleep(random.random() * random.randint(3, 5)) for element in title_element: print(await (await element.getProperty('textContent')).jsonValue()) #打印所有节点元素文本信息 await asyncio.sleep(10) await brower.close() asyncio.get_event_loop().run_until_complete(main())
第一页标题:
部分搜索页面