即使我在Selenium Headless Chrome上使用代理和用户代理旋转(并且我已经通过https://free-proxy-list.net/
和TOR提取了ip,并通过https://httpbin.org/
对其进行了测试,显示了代理ip和用户代理预期,因此我知道这应该可以正常工作),但是在Glassdoor的主页“ https://www.glassdoor.com/index.htm”上尝试使用新的IP和用户代理仍然很受阻。
作为上下文:
https://free-proxy-list.net/
中提取的代理以及具有旋转TOR代理的Selenium(两者均得出相同的结果)https://developers.whatismybrowser.com/useragents/explore/software_name/chrome/
中的随机用户代理,这些代理与Docker容器操作系统和浏览器规范(X11和Chrome / 6或Chrome / 7一致,因此没有JS显示问题)这是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,所以也许有人可以帮助我了解情况如何。
答案 0 :(得分:2)
我认为这与您的IP地址或浏览器代理无关。您可能正被阻止,因为该站点正试图阻止抓取。参见Can a website detect when you are using selenium with chromedriver?
答案 1 :(得分:0)
Glassdoor具有您可以作为合作伙伴访问的API。 (您需要与他们联系以进行访问)它应该为您提供所需的一切,而无需抓取该网站。
答案 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)