python - 尽管 IP 和用户代理轮换抓取,但仍被禁止
问题描述
即使我在 Selenium Headless Chrome 中使用代理和用户代理轮换(我已经通过https://free-proxy-list.net/
和 TOR 提取了 ip,并对其进行了测试,https://httpbin.org/
它显示了预期的代理 ip 和用户代理,所以我知道这应该可以工作),在 Glassdoor 的主页“ https://www.glassdoor.com/index.htm ”上尝试使用新 IP 和用户代理时,我仍然会被阻止。
作为上下文:
- 在本地运行的 Docker 容器中开发
- 在 Selenium Python 中使用 Headless Chrome
- 使用最近从
https://free-proxy-list.net/
Selenium 提取的代理和旋转 TOR 代理(两者都给出相同的结果) - 使用与 Docker 容器操作系统和浏览器规范一致的随机用户代理
https://developers.whatismybrowser.com/useragents/explore/software_name/chrome/
(X11 和 Chrome/6 或 Chrome/7,因此没有 JS 显示问题) - 抓取 Glassdoor 的招聘信息。其他工作网站运行良好,因此它是 Glassdoor 特定的。
- 如果我使用像 ProtoVPN 这样的免费本地 VPN 提供商,它工作得很好,但是这个解决方案是不可扩展的,因为整个想法不是在这个项目上花钱,而是让收集自动化(不是任何商业产品,只需要足够的数据练习一些 NLP/机器学习)
这是 Chrome 设置:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-translate")
chrome_options.add_argument(f"--proxy-server={ip}")
chrome_options.add_argument(f"user-agent=[{random_user_agent()}]")
我的理论是 Glassdoor 正在以某种方式测试我的浏览器,它表明我正在使用代理,或者我有一个设置表明它是一个自动浏览器。关于正在发生的事情有什么想法吗?
编辑:我已经检查了 Selenium 被检测到的可能性,但现实是,即使我将 Selenium 与免费代理/TOR/VPN 一起使用,使用 VPN 进行抓取也没有问题,因此这意味着问题必须是在使用代理与 VPN 时,也许有人可以帮助我了解这是如何发生的。
解决方案
我认为这与您的 IP 地址或浏览器代理无关。您可能会被阻止,因为该站点正试图阻止抓取。请参阅网站可以检测到您何时将 selenium 与 chromedriver 一起使用?
推荐阅读
- swiftui - SwiftUI:点击获取 LazyHGrid 中的单元格视图框架?
- java - 密码中标签长度为 32 的 GCMParameterSpec
- java - 遍历表中的 webelements 列表并断言每个字符串相等
- python - Tkinter:进度条指示上传文件的状态
- c# - 从 Function App ILogger (C#) 在 Application Insights 中记录自定义对象
- swiftui - SwiftUI 的 ForEach 是否会缓存子视图的 @State 变量超出其存在范围?
- python - 使用 Urllib 下载视频
- c++ - 如何在不实际复制它们的情况下传递 nuget 包?
- matlab - 在 Matlab 中将传递函数转换为微分方程
- c++ - AWS C++ 开发工具包在 ShutdownAPI() 上生成“关闭连接 0”消息