设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 14423|回复: 5
打印 上一主题 下一主题

求助: 使用无头浏览器载入的仍然是js没有执行空白页面?

[复制链接]

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2022-6-11 23:17:30 |只看该作者 |倒序浏览
本帖最后由 anyone 于 2022-6-11 23:18 编辑

想要下载某个网站中的信息, 其页面中都是js, 所以我尝试使用无头浏览器库: pyppeteer

一切都是初学, 只是照猫画虎得到下面的代码:
  1. import asyncio
  2. from pyppeteer import launch

  3. async def main():

  4.     browser = await launch()
  5.     page = await browser.newPage()
  6.     await page.setUserAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36')
  7.     await page.goto('https://www.gousto.co.uk/cookbook/chicken-recipes/nutty-bang-bang-chicken-rice-salad', waitUntil='networkidle0')
  8.     await page.screenshot({'path': 'c:/desktop/1654930971.png'})
  9.     await browser.close()

  10. asyncio.get_event_loop().run_until_complete(main())
复制代码
得到的是一个空白页面.
但是换成其他的需要js调用的网址, 就能显示其内容, 比如: "https://chemdrawdirect.perkinelmer.cloud/js/sample/index.html"

我猜想gousto这个网站可能做了一些防止无头浏览器的检测.

我尝试更改了user agent,
也更改了载入判断: waitUntil

但是仍然只能得到空白页面.

想请高手帮我看看, 他使用了什么方法检测出我使用无头浏览器查看的?


非常感谢.
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2022-6-12 00:07:23 |只看该作者
这个不好确定,但给你一个参考:
https://mp.weixin.qq.com/s/5_Ip3c7jcjWHcawehh-1Lw
你以为的万能爬虫方法,其实一行代码就能识别!

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

板凳
发表于 2022-6-12 17:36:26 |只看该作者
感谢回复, 可是你给我的参考让我更加困惑了.

文章中的结尾: "那么如何绕过这个event.isTrusted呢?其实很简单,你使用Selenium/Puppeteer,天然就能绕过它。"

而我就是使用的是puppeteer的python版本: pyppeteer, 应该也能避免这个问题对吗?

不知您可否费心帮我看看, 或者给我一些思路也行, 我也好按图索骥, 有点儿方向.

现在我是没有思路, 不知道该检查哪里.

万分感谢.
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

地板
发表于 2022-6-12 17:41:30 |只看该作者
另外我想到的一个思路, 不知道是否具有可行性:

既然无头浏览器有诸多被检测到的可能, 那么我可否使用真正的浏览器, 用损失效率换取一些万能的方法.
达到我可以用python萃取其中内容即可.

有时候并不是大量的取数据, 也许就是10来页的文章什么的,
大动干戈的研究网站防爬有点儿得不偿失.

如果能找到一个比挨个下载网页, 然后拷贝粘贴快一些的方式就好了.

不知道 先生 有什么建议?

感谢.
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2022-6-12 22:45:14 |只看该作者
anyone 发表于 2022-6-12 17:41
另外我想到的一个思路, 不知道是否具有可行性:

既然无头浏览器有诸多被检测到的可能, 那么我可否使用真正 ...

可以尝试用 selenium,然后不要用无头模式(默认就不是),它会打开chrome,然后你可以观察加载的过程

但这个方法理论上还是可能会被检测,如果试下来还是不行,还有个极端的办法:就是通过鼠标模拟操作,直接去操作真实的浏览器。(比如 PyAutoGUI)
这种情况,除非对方网站对用户行为进行分析检测,不然是无法区分的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

6#
发表于 2022-6-24 00:13:08 |只看该作者
感谢先生的回复,
最近忙还未尝试先生的建议
我打算稍后尝试一下鼠标模拟.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 17:35 , Processed in 0.023054 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部