【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())

第一页标题:

部分搜索页面

 

posted @ 2024-07-16 17:25  山鬼谣`  阅读(54)  评论(0编辑  收藏  举报