回答編集履歴
1
見直しキャンペーン中
answer
CHANGED
@@ -1,52 +1,52 @@
|
|
1
|
-
[リファレンス](http://www.puppeteersharp.com/api/index.html)を見ながら勘で書いたので「間違っている・もっといい方法がある」かもしれません。
|
2
|
-
|
3
|
-
```
|
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
|
```
|