尽管有IP和用户代理轮换限制,但仍被禁止

时间:2019-07-16 13:54:20

标签: python selenium docker google-chrome web-scraping

即使我在Selenium Headless Chrome上使用代理和用户代理旋转(并且我已经通过https://free-proxy-list.net/和TOR提取了ip,并通过https://httpbin.org/对其进行了测试,显示了代理ip和用户代理预期,因此我知道这应该可以正常工作),但是在Glassdoor的主页“ https://www.glassdoor.com/index.htm”上尝试使用新的IP和用户代理仍然很受阻。

作为上下文:

  • 正在本地运行的Docker容器中开发
  • 将Headless Chrome与Selenium Python结合使用
  • 使用最近从https://free-proxy-list.net/中提取的代理以及具有旋转TOR代理的Selenium(两者均得出相同的结果)
  • 使用https://developers.whatismybrowser.com/useragents/explore/software_name/chrome/中的随机用户代理,这些代理与Docker容器操作系统和浏览器规范(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与Free Proxies / TOR / VPN一起使用,使用活动VPN进行刮擦也没有问题,因此这意味着问题一定在使用Proxy vs VPN,所以也许有人可以帮助我了解情况如何。

3 个答案:

答案 0 :(得分:2)

我认为这与您的IP地址或浏览器代理无关。您可能正被阻止,因为该站点正试图阻止抓取。参见Can a website detect when you are using selenium with chromedriver?

答案 1 :(得分:0)

Glassdoor具有您可以作为合作伙伴访问的API。 (您需要与他们联系以进行访问)它应该为您提供所需的一切,而无需抓取该网站。

https://www.glassdoor.com/developer/index.htm

答案 2 :(得分:0)

我能够使用该简单的python脚本访问此页面。

也许网站已经用硒自动识别了浏览器的指纹。也许尝试https://github.com/GoogleChrome/puppeteer或我的脚本。 另外,免费代理的质量通常很差,也许您可​​以使用服务器或付费代理。

要选择最佳的用户代理,可以使用该libraby:https://github.com/Lobstrio/shadow-useragent

     1 import requests
     2 
     3 headers = {
     4     'authority': 'www.glassdoor.fr',
     5     'upgrade-insecure-requests': '1',
     6     'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
     7     'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
     8     'accept-encoding': 'gzip, deflate, br',
     9     'accept-language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7',
    10 }
    11 
    12 params = (
    13     ('countryRedirect', 'true'),
    14 )
    15 
    16 response = requests.get('https://www.glassdoor.fr/index.htm', headers=headers, params=params)
    17 print(response.content)