如何利用 Playwright 对已打开的浏览器进行爬虫

之前写过一篇关于如何利用 Selenium 操作已经打开的浏览器进行爬虫的文章

如何利用 Selenium 对已打开的浏览器进行爬虫!

最近发现很多人都开始摒弃 Selenium,全面拥抱 Playwright 了,那如何利用 Playwright 进行爬虫,以应对一些反爬严格的网站呢?

对 Playwright 不了解的小伙伴,可以看很早之前写过的一篇文章

具体操作步骤如下:

PS:这里以 Chrome 为例,其他浏览器类似

1-1  查看本地 Chrome 浏览器的的安装地址

比如:C:\Program Files\Google\Chrome\Application\chrome.exe

1-2  命令行启动浏览器

打开 CMD 终端,输入下面命令行打开 Chrome 浏览器

  1. # 使用无痕模式,打开目标网站,最大化展示

  2. cd C:\Program Files\Google\Chrome\Application\ && chrome.exe --remote-debugging-port=6666 --user-data-dir="C:\work\chrome"  --start-maximized  --incognito --new-window https://www.taobao.com

其中

  • --remote-debugging-port 端口号

指定浏览器调试端口号

PS:这里可以随机指定一个端口号,不要指定为已经被占用的端口号

  • --user-data-dir 用户数据保存目录

指定浏览器的用户数据保存目录

注意:需要设置到一个全新的目录,不要影响 Chrome 浏览器系统用户的数据

  • --incognito 用户数据保存目录

    无痕模式打开,默认非无痕模式

  • --start-maximized

    窗口最大化显示

  • --new-window  目标地址

    直接打开目标网站

1-3 编写代码操作浏览器

使用命令行打开 Chrome 浏览器后,就可以使用 Playwright 编写代码,继续对浏览器进行操作

注意:必须保证上面的操作只打开一个浏览器窗口,方便我们进行操作

2  实战一下

目标:使用 Playwright 操作上面命令行打开的浏览器页面,根据关键字进行搜索,获取商品标题及地址

需要注意的是,通过 connect_over_cdp 指定的端口号要和浏览器调试端口号保持一致

  1. from playwright.sync_api import sync_playwright

  2. with sync_playwright() as p:

  3.     browser = p.chromium.connect_over_cdp('http://localhost:6666/')

  4.     # 获取页面对象

  5.     # 上下文索引:第一个

  6.     # page索引:第一个

  7.     page = browser.contexts[0].pages[0]

  8.     # 输入

  9.     page.locator("#q").fill("Python")

  10.     # 点击搜索

  11.     page.locator(".btn-search").click()

  12.     # 等待元素出现

  13.     # 注意:由于page.locator能获取多条数据,这里使用first获取1条数据,避免wait_for()方法报错

  14.     page.locator("div[class^=Card--doubleCard]").first.wait_for(state='visible')

  15.     # 获取商品盒子下所有div元素列表

  16.     elements = page.locator("div[class^=Content--contentInner]>div").all()

  17.     # 遍历,获取标题及地址

  18.     for element in elements:

  19.         # 标题

  20.         title_element = element.locator("div[class^=Title--title--] > span").first

  21.         # 地址

  22.         href_element = element.locator("a[class^=Card--doubleCardWrapper--]")

  23.         href = "https:" + href_element.get_attribute("href")

  24.         print("标题:", title_element.text_content(), ",URL:", href)

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值