在调用page.evaluate执行js从页面取数据之前,需要先page.waitForSelector,waitForSelector的参数貌似和page.evaluate中要抓取的内容没关系也可以,关键是调用page.waitForSelector等待web页加载完成后再调用page.evaluate,否则有可能取不到数据。
//这儿好像select什么都可以,关键是等一会儿页面加载,
//否则下面执行page.evaluate时,页面好像还没有加载完。
await page.waitForSelector("meta[name='description']");
desc = await page.evaluate(
r'''resultsSelector => {
const metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute('name') === 'description') {
return metas[i].getAttribute('content');
return null;
}''',
在调用page.evaluate执行js从页面取数据之前,需要先page.waitForSelector,waitForSelector的参数貌似和page.evaluate中要抓取的内容没关系也可以,关键是调用page.waitForSelector等待web页加载完成后再调用page.evaluate,否则有可能取不到数据。
在
Flutter
中使用
puppeteer
库执行JS代码并返回值的方法是:
首先需要安装
puppeteer
库,在pubspec.yaml文件中添加依赖:
puppeteer
: ^0.13.0
在
dart
文件中引入库:import 'package:
puppeteer
/
puppeteer
.
dart
';
使用
Puppeteer
.launch()方法启动浏览器实例。
使用browser.newPag...
async def main():
browser = a
wait
pyppeteer.launch(headless=False, args=['--disable-infobars'])
page
= a
wait
browser.new
Page
()
a
wait
page
.setViewport({'width': 1366, 'height': 768})
a
wait
page
.
eval
uate
OnNe
import 'package:binary/binary.
dart
' ;
// Start using package:binary.
如果您不熟悉,则值得在使用此软件包之
前
阅读文档,该软件包大量使用了大多数功能的扩展。 一个小的入门而不是写像这样的东西:
void main () {
// Old API in version <= 0.1.3:
print ( toBinaryPadded ( 0x0C , 8 )); // 00001100
现在,您可以使用toBinaryPadded
话不多说,上代码
//等待登陆按钮
selector
出现在
页
面中
a
wait
page
.
wait
For
Selector
(
SELECTOR
.LOGIN_BTN)
//
页
面等待3秒
a
wait
page
.
wait
ForTimeout(3000)
//等待登录按钮XPath出现在
页
面中
a
wait
page
.
wait
ForXPath(XPATH.LOGIN_BTN)
a
wait
page
.goto(url)
//等待
页
面加载完成
a
wait
page
.
wait
ForNavigation();
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
点击Copy
selector
,再赋值到文本文档里面,就可以知道如何能找到这个li了。
2.不止如何测试上传文件
参考:https://juejin.im/post/5c6bc7ea6fb9a049f43be1f1#heading-2
3.id...
抓取
“相关搜索”关键词在
puppeteer
学习(二) 中介绍了自动访问百度网站的例子,在此基础上,下面的例子
抓取
了相关搜索的关键词(百度下面有一个相关搜索的功能)。
代码如下:// 演示自动访问百度网站并
抓取
相关搜索关键词
const
puppeteer
= require('
puppeteer
');(async () => {
const browser = a
wait
puppeteer
这里写目录标题`
Puppeteer
` 安装语法基本语法API 分层结构加载导航
页
面等待元素、请求、响应自定义等待元素定位用户模拟操作请求拦截获取
Web
Socket 响应植入 JavaScript 代码
页
面性能分析文件的上传和下载跳转新 tab
页
处理模拟不同的设备模拟键盘
Puppeteer
安装
安装第三方库:
puppeteer
npm i
puppeteer
安装谷歌 Chromium:若 npm 安装失败,需要手动下载 chromium 并解压至相应文件夹
API 分层
在使用
Dart
中的
Puppeteer
抓取
页
面时,可以通过在浏览器中手动登录后,使用 `
page
.cookies` 方法获取当
前
浏览器的 cookie 信息,然后在使用
Puppeteer
抓取
页
面时将这些 cookie 信息传入即可带上登录态。
示例代码:
// 获取当
前
浏览器的 cookie 信息
List<Cookie> cookies = a
wait
browser.getCookies();
// 在
Puppeteer
中打开新
页
面
Page
new
Page
= a
wait
browser.new
Page
();
// 设置 cookie
a
wait
new
Page
.setCookie(...cookies);
//
抓取
页
面
a
wait
new
Page
.goto(url);
注:这只是一个示例代码,具体实现还需要根据你的项目具体情况来调整。