如何通过无头驱动程序访问站点而不被拒绝许可

问题描述 投票:0回答:4

我正在尝试使用无头 Chrome 驱动程序检索网站的 html 代码。但是我收到“权限被拒绝”消息。如果我使用“常规”驱动程序,一切正常。

有什么办法可以绕过这个吗?

这是我的第一篇文章,因此我对格式中可能出现的任何错误深表歉意

from selenium import webdriver

#Headless driver 

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')                                             

driver1 = webdriver.Chrome(executable_path='./chromedriver', options=chrome_options, 
service_args=['--verbose', '--log-path=/tmp/chromedriver.log'])

driver1.get('https://www.size.co.uk/')
html = driver1.page_source
html

我收到的消息是:

<html xmlns="http://www.w3.org/1999/xhtml"><head>\n<title>Access Denied</title>\n</head><body>\n<h1>Access Denied</h1>\n \nYou don\'t have permission to access "http://www.size.co.uk/" on this server.<p>\nReference #18.ac81655f.1548818550.73b12da\n\n\n</p></body></html>

普通司机:

driver = webdriver.Chrome('./chromedriver')
driver.get('https://www.size.co.uk/')
html = driver.page_source
driver.quit()
html

理想情况下,我希望输出与后一种情况相同,而不会每隔几秒弹出新窗口。

python selenium selenium-webdriver selenium-chromedriver google-chrome-headless
4个回答
16
投票

添加以下代码片段即可返回页面:

user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'    
chrome_options.add_argument('user-agent={0}'.format(user_agent))

该网站显然正在检查无头浏览器,然后拒绝它们访问。这是一篇关于避免检测的文章:Making Chrome Headless UnDetectable

要获取驱动程序使用的用户代理,您可以运行以下命令:

driver.execute_script("return navigator.userAgent")

Chrome 无头用户代理是这样的:

u'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)HeadlessChrome/71.0.3578.98 Safari/537.36'


0
投票

你必须在代码中更改user-agent

如果您发送大量请求,则必须在每个请求中更改 user-agent 值 Python 和其他语言中有很多库可以帮助你如何做 请参阅下面的链接了解如何使用它:

如何在 Selenium 中更改 Google Chrome 用户代理?


0
投票

此用户代理在 Heroku 中不再工作: user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, 如 Gecko) Chrome/60.0.3112.50 Safari/537.36'

使用这个有效:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36

0
投票

这就是 2024 年 3 月对我有用的方法:

options.addArguments("--headless=new");

而不是:

options.addArguments("--headless");

尝试将此与 @cullzie 建议的用户代理更改结合起来

© www.soinside.com 2019 - 2024. All rights reserved.