Pyppeteer使用

简单实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import asyncio
from lxml import etree
from pyppeteer.launcher import launch

async def main():
# 启动浏览器
# headless是否无头
# devtools是否开调试
# userDataDir指定用户数据目录,保存cookie等信息
browser = await launch(headless=False, devtools=False, userDataDir='./userdata', args=['--disable-infobars'])

# 打开网页
page = await browser.newPage()

# 防止被检测
await page.evaluateOnNewDocument('Object.defineProperty(navigator, "webdriver", {get: () => undefined})')

# 跳转到指定网页
await page.goto("https://spa2.scrape.center/")

# 等待网页某个元素加载完成
await page.waitForSelector(".item .name")

# 获取网页内容
# content = await page.content()
# tree = etree.HTML(content)
# print(tree.xpath('//h2[@class="m-b-sm"]/text()'))
first_title = await page.querySelectorEval('.m-b-sm', 'node => node.innerText')
titles = await page.querySelectorAllEval('.m-b-sm', 'nodes => nodes.map(node => node.innerText)')
print(titles)

await asyncio.sleep(5)

# 关闭浏览器
await browser.close()

asyncio.get_event_loop().run_until_complete(main())

无痕浏览器

1
2
3
4
5
# 无痕浏览器
context = await browser.createIncognitoBrowserContext()

# 打开网页
page = await context.newPage()

执行js代码

1
2
3
await page.evaluate('''() => {
console.log('hello');
}''')

切换选项卡

1
2
3
4
# 获取所有选项卡
pages = await browser.pages()
# 切换到第一个选项卡
await pages[0].bringToFront()

输入,点击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import asyncio
from pyppeteer.launcher import launch

async def main():
# 启动浏览器,headless是否无头模式,devtools是否开调试,userDataDir指定用户数据目录,保存cookie等信息
browser = await launch(headless=False, devtools=False, userDataDir='./userdata', args=['--disable-infobars'])

# 打开网页(默认有一个网页)
page = (await browser.pages())[0]

# 跳转到指定网页
await page.goto("https://www.baidu.com")

# 输入
# input_box = await page.xpath('//*[@id="kw"]')
# await input_box[0].type('python')
await page.type('#kw', 'python')

# 回车
#await page.keyboard.press('Enter')

# 点击提交按钮
# submit = await page.xpath('//*[@id="su"]')
# await submit[0].click()

# 1s后点击,1次点击次数
await page.click('#su', options={'delay': 1000, 'clickCount': 1})

await asyncio.sleep(5)
await browser.close()

asyncio.get_event_loop().run_until_complete(main())

等待

1
2
# 等待1s
page.waitFor(1000)

其它

1
2
3
4
5
6
# 返回 
await page.goBack()
# 前进
await page.goForward()
# 刷新页面
await page.reload()