C#:用Playwright实现截长图

很多时候,我们有网页链接,但希望拿到网页的长图,这个过程还是稍嫌麻烦的。

毕竟要拿出手机,手不停地滑动,直到最底下,比较累。

还好,现在有了Playwright。

Playwright 是微软官方的一个开源框架。具体说明还是贴原文吧:

Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.

官方的文档链接:

https://playwright.dev/dotnet/docs/intro

先贴个最直接的Demo (注:至少是VS2022+)

using Microsoft.Playwright;

using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("https://playwright.dev/dotnet");
await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" });

简单几行代码,就能实现这么强大的功能,是不是很酷?

酷是酷,但代价也是挺大的,毕竟大伙用的不一定是VS2022,即使用了可能framework之类的也不是新的。

难道只能当玩具,看着流口水?

也不是,咱们曲线救国吧。

VS2022装还是要装的,不装很多东西没有,因为Playwright依赖的东西特别多。

与平时用的框架版本不一致怎么办?

Playwright写成一个单独的控制台程序,然后旧框架代码,进程调用这个控制台程序就可以了。

下面是自己写的一个控制台程序,抛砖引玉吧:

using Microsoft.Playwright;
using System.Threading.Tasks;

namespace PlaywrightDemo
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                bool noParas = (args == null || args.Length == 0);
                int firstWaitMs = noParas ? 5000 : Convert.ToInt32(args[0]);
                int secondWaitMs = noParas ? 10000 : Convert.ToInt32(args[1]);
                int viewWidth = noParas ? 500 : Convert.ToInt32(args[2]);
                int viewHeight = noParas ? 10000 : Convert.ToInt32(args[3]);
                string url = noParas ? "https://www.meipian.cn/2bgwp40x" : args[4];
                string outFilePath = noParas ? "d:\\1.png" : args[5];

                var playwright = await Playwright.CreateAsync();
                IBrowser browser = await playwright.Chromium.LaunchAsync();
                var page = await browser.NewPageAsync();
                await page.GotoAsync(url);
                Console.WriteLine("Begin:{0}",DateTime.Now);
                await page.WaitForTimeoutAsync(firstWaitMs);
                await page.SetViewportSizeAsync(viewWidth, viewHeight);
                await page.Mouse.WheelAsync(0, viewHeight);
                await page.WaitForTimeoutAsync(secondWaitMs);
                await page.ScreenshotAsync(new PageScreenshotOptions
                {
                    Path = "screenshot.png",
                    FullPage = true
                });
                if (File.Exists(outFilePath))
                {
                    File.Delete(outFilePath);
                }
                File.Copy("screenshot.png", outFilePath);
                Console.WriteLine("End:{0}", DateTime.Now);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

写到这里呢,自己也不是太满意,毕竟要如此的劳神费事,还是太笨拙。

如哪位朋友有更好的办法,欢迎拍砖。

Hello Playwright:(1)从开发到部署

Hello Playwright:(2)简化部署方式

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C#中使用Cookie实现推特自动登录可以借助Playwright库来实现Playwright是一个跨浏览器自动化测试工具,它支持多种编程语言,包括C#。 首先,你需要安装Playwright库。可以通过NuGet包管理器或者在Visual Studio中使用NuGet控制台来安装Playwright库。 安装完成后,你可以使用以下代码示例来实现推特自动登录: ```csharp using Microsoft.Playwright; class Program { static async Task Main(string[] args) { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(); var context = await browser.NewContextAsync(); // 创建一个新的页面 var page = await context.NewPageAsync(); // 导航到推特登录页面 await page.GotoAsync("https://twitter.com/login"); // 等待登录表单加载完成 await page.WaitForSelectorAsync("form[action='/sessions']"); // 填写登录表单 await page.FillAsync("input[name='session[username_or_email]']", "your_username"); await page.FillAsync("input[name='session[password]']", "your_password"); // 提交登录表单 await page.ClickAsync("div[data-testid='LoginForm_Login_Button']"); // 等待登录成功 await page.WaitForNavigationAsync(); // 获取登录后的Cookie var cookies = await context.CookiesAsync(); // 打印Cookie信息 foreach (var cookie in cookies) { Console.WriteLine($"Name: {cookie.Name}, Value: {cookie.Value}"); } } } ``` 上述代码使用Playwright库来模拟浏览器行为,实现了自动登录推特并获取登录后的Cookie信息。你需要将`your_username`和`your_password`替换为你的推特账号的用户名和密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值