質問するログイン新規登録

回答編集履歴

1

なんで消えるんですかね!せっかく書いたのに・・・

2019/02/18 18:51

投稿

shinji709
shinji709

スコア805

answer CHANGED
@@ -28,4 +28,44 @@
28
28
  ```
29
29
  等になるのでしょうか。
30
30
  しかしやりたいことはブラウザ操作ではなくDOMを解析してquerySelectorで特定の情報を抜き出すことなのですよね?
31
- でしたら私だったらnpm i
31
+ でしたら私だったらnpm i
32
+ <消えたのでここから続き>
33
+ でしたら私だったらnpm install jsdomして、chromeにDOM構築させてから文字列で受け取ってあとはnode側でJSDOM使って処理します。以下のように(urlは変えてくださいね)
34
+ ```JavaScript
35
+ const { JSDOM } = require('jsdom');
36
+ const puppeteer = require('puppeteer');
37
+ (async () => {
38
+ const browser = await puppeteer.launch();
39
+ const page = await browser.newPage();
40
+ await page.goto('https://example.com/');
41
+ await page.waitForSelector('.resultitem');
42
+ const html = await page.evaluate(() => document.documentElement.outerHTML);
43
+ browser.close();
44
+
45
+ const document = new JSDOM(html).window.document;
46
+ const items = document.querySelectorAll('.resultitem');
47
+ console.log(items[0].children);
48
+ })();
49
+ ```
50
+ 更にnpm install jqueryして以下のようにするとjQueryも使えますよ。
51
+ ```JavaScript
52
+ const { JSDOM } = require('jsdom');
53
+ const puppeteer = require('puppeteer');
54
+ (async () => {
55
+ const browser = await puppeteer.launch();
56
+ const page = await browser.newPage();
57
+ await page.goto('https://example.com/');
58
+ await page.waitForSelector('.resultitem');
59
+ const html = await page.evaluate(() => document.documentElement.outerHTML);
60
+ browser.close();
61
+
62
+ const window = new JSDOM(html).window;
63
+ const document = window.document;
64
+ const $ = require('jquery')(window);
65
+
66
+ const $items = $('.resultitem');
67
+ console.log($items.children());
68
+ })();
69
+ ```
70
+ いつもクライアント側でやるのと同じように書けて分かりやすくないでしょうか?
71
+ お求めの答えかは分かりませんが、参考になりましたら幸いです。