我对这个特定主题感到困惑,我为两个不同的网站构建了一个bot,它使用python的请求模块来手动模拟HTTP PoST和GET请求的发送。
我实施了袜子代理,并在请求中使用了用户代理,并在必要时使用了引荐来源网址(我使用burpsuite在这些站点上验证了浏览器发送的实际请求),以使其看起来真实。
但是,我通过我的漫游器运行的所有帐户都会被暂停。我想知道我在做什么错,一个朋友建议也许我应该使用这些无头解决方案之一(phantomJS),而我倾向于那条路线,但我仍然很困惑,想知道使用之间的区别是什么HTTP请求模块,并使用无头浏览器(例如phantomJS)。
我不确定是否需要在此处粘贴我的源代码。只是在寻找这个项目的方向。感谢您抽出宝贵的时间阅读这么长的文字:)
答案 0 :(得分:1)
可能您必须设置cookie。
要使请求更真实,应设置其他标头,例如 Host 和 Referer 。但是, Cookies 标头应每次更改。您可以通过以下方式获得它们:
from requests import Session
with Session() as session:
# Send request to get cookies.
response = session.get('your_url', headers=your_headers, proxies=proxies) # eventually add params keyword
cookies = response.cookies.get_dict()
response = session.get('your_url', headers=your_headers, cookies=cookies, proxy=proxy)
或者也许,该网站正在以某种方式扫描机器人。
在这种情况下,您可以尝试在time.sleep()
的请求之间添加延迟。您可以在浏览器的“开发工具”中查看计时。另外,您可以模拟在连接到浏览器上的站点时发送的 all 请求,例如 ajax脚本等。
根据我的经验,使用请求或使用Selenium Webdrivers在检测方面并没有多大区别,因为您无法访问标头甚至请求和响应数据。另外,请注意,不再支持Phantom Js。最好改用无头Chrome。
如果所有请求方法都不起作用,我建议使用Selenium-wire或Mobilenium(Selenium的修改版),它们允许访问请求和响应数据。
希望有帮助。