我在本地计算机上使用了以下代码:
from selenium import webdriver
chrom_path = r"C:\Users\user\sof\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrom_path)
link = 'https://www.google.com/'
driver.get(link)
s = driver.page_source
print((s.encode("utf-8")))
driver.quit()
这段代码返回了这个网站的页面源代码,但是当我在Linux服务器centos7上使用这个代码时:
^{pr2}$此代码还应返回页面源代码,但此代码返回:
b'<html><head>\n<title>Access Denied</title>\n</head><body>\n<h1>Access Denied</h1>\n \nYou don\'t have permission to access "http://www.newark.com/" on this server.<p>\nReference #18.456cd417.1576243477.e007b9f\n\n\n</p></body></html>'
有人知道为什么相同的代码在不同的操作系统上的工作方式不同吗?在
一些网站拒绝访问无头浏览器。在您的本地计算机上,浏览器不运行headless,在linux机器上它运行。您可以通过设置自定义用户代理来规避此问题:
如果您将其设置为您在windows计算机上使用的用户代理,那么就可以做到了。在
根据您在Windows本地机器非headlessChrome上的代码测试,而在Linux服务器centos7上使用headless Chrome时,您将被重定向到访问被拒绝的页面。在
拒绝访问
根据文章How to bypass “Access Denied” pages when using Headless Chrome,Chrome在无头模式下运行和以headed模式运行时有一点不同。核心网络堆栈是相同的,并且在浏览器如何在包级别传输请求方面没有区别,这只向我们指出了请求的内容。在检查headless和headed Chrome发出的请求时,发现headless Chrome正在通过其用户代理header来了解自己。头为的Chrome的头几乎是相似的减去
Headless
。在无头Chrome用户代理是:
解决方案
所以一个精确的解决方案是将user-agent设置为头镀铬。Chrome v79.x的用户代理是:
^{pr2}$您可以按如下方式修改代码并执行:
在Windows 10操作系统上执行
对windows-10框执行的结果:
代码块:
控制台输出:
tl;dr
您可以在以下位置找到相关讨论:
相关问题 更多 >
编程相关推荐