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

回答編集履歴

1

見直しキャンペーン中

2023/07/22 09:22

投稿

TN8001
TN8001

スコア10104

answer CHANGED
@@ -1,52 +1,52 @@
1
- [リファレンス](http://www.puppeteersharp.com/api/index.html)を見ながら勘で書いたので「間違っている・もっといい方法がある」かもしれません。
2
-
3
- ```C#
4
- using System;
5
- using System.Threading.Tasks;
6
- using PuppeteerSharp;
7
-
8
- namespace Questions278339
9
- {
10
- class Program
11
- {
12
- static async Task Main()
13
- {
14
- await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
15
- var browser = await Puppeteer.LaunchAsync(new LaunchOptions
16
- {
17
- //Headless = false,
18
- });
19
-
20
- var page = await browser.NewPageAsync();
21
- await page.GoToAsync("https://teratail.com/");
22
-
23
- // フッターの「teratailを一緒に作りたいエンジニア」リンク
24
- var element = await page.WaitForSelectorAsync("#footerTop > div > div.L-footer__navigation.leftCol > div.U-clearfix.clearFix > div > p > a");
25
- await element.ClickAsync();
26
-
27
- var url = await element.EvaluateFunctionAsync<string>("e => e.getAttribute('href')");
28
- var target = await page.BrowserContext.WaitForTargetAsync((x) => x.Url == url);
29
- var page2 = await target.PageAsync();
30
-
31
- // DOMContentLoadedイベント ClickAsync後 遷移が早いと間に合わないか??
32
- page2.DOMContentLoaded += Page2_DOMContentLoaded;
33
-
34
- // セレクタで待つなら 「応募する」ボタン
35
- await page2.WaitForSelectorAsync("body > section > div:nth-child(2) > div.button-area > a");
36
- Console.WriteLine(await page2.GetContentAsync());
37
-
38
- Console.ReadLine();
39
- browser.Dispose();
40
- }
41
-
42
- private static async void Page2_DOMContentLoaded(object sender, EventArgs e)
43
- {
44
- if(sender is Page page)
45
- {
46
- page.DOMContentLoaded -= Page2_DOMContentLoaded;
47
- Console.WriteLine(await page.GetContentAsync());
48
- }
49
- }
50
- }
51
- }
1
+ [リファレンス](http://www.puppeteersharp.com/api/index.html)を見ながら勘で書いたので「間違っている・もっといい方法がある」かもしれません。
2
+
3
+ ```cs
4
+ using System;
5
+ using System.Threading.Tasks;
6
+ using PuppeteerSharp;
7
+
8
+ namespace Questions278339
9
+ {
10
+ class Program
11
+ {
12
+ static async Task Main()
13
+ {
14
+ await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
15
+ var browser = await Puppeteer.LaunchAsync(new LaunchOptions
16
+ {
17
+ //Headless = false,
18
+ });
19
+
20
+ var page = await browser.NewPageAsync();
21
+ await page.GoToAsync("https://teratail.com/");
22
+
23
+ // フッターの「teratailを一緒に作りたいエンジニア」リンク
24
+ var element = await page.WaitForSelectorAsync("#footerTop > div > div.L-footer__navigation.leftCol > div.U-clearfix.clearFix > div > p > a");
25
+ await element.ClickAsync();
26
+
27
+ var url = await element.EvaluateFunctionAsync<string>("e => e.getAttribute('href')");
28
+ var target = await page.BrowserContext.WaitForTargetAsync((x) => x.Url == url);
29
+ var page2 = await target.PageAsync();
30
+
31
+ // DOMContentLoadedイベント ClickAsync後 遷移が早いと間に合わないか??
32
+ page2.DOMContentLoaded += Page2_DOMContentLoaded;
33
+
34
+ // セレクタで待つなら 「応募する」ボタン
35
+ await page2.WaitForSelectorAsync("body > section > div:nth-child(2) > div.button-area > a");
36
+ Console.WriteLine(await page2.GetContentAsync());
37
+
38
+ Console.ReadLine();
39
+ browser.Dispose();
40
+ }
41
+
42
+ private static async void Page2_DOMContentLoaded(object sender, EventArgs e)
43
+ {
44
+ if(sender is Page page)
45
+ {
46
+ page.DOMContentLoaded -= Page2_DOMContentLoaded;
47
+ Console.WriteLine(await page.GetContentAsync());
48
+ }
49
+ }
50
+ }
51
+ }
52
52
  ```