当前位置: 首页 > 面试题库 >

如何在没有被拒绝的情况下通过无头驱动程序访问站点

符懿轩
2023-03-14
问题内容

我正在尝试使用无头的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

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


问题答案:

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

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))

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

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

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’



 类似资料:
  • 它与49.0版本完美地工作。 Browsestack功能 “浏览器”:“Firefox”,“Browserversion”:“”,“OS”:“Windows”,“OSVersion”:“7”,“分辨率”:“1024x768”,“提线木偶”:true 更奇怪的事。它与Selenium 3.0.1 beta2和Firefox 49,51,52一起工作,至少用于is is_displained方法,但是

  • 我有几个AWS EC2实例,并在它们上部署了一个Rancher实例。在Rancher上,我使用Kubernetes部署了一个网站,它使用Istio部署来处理网络,我可以通过登录。我还使用AWS路由53来使URL工作,并使用nginx来实现跨EC2实例的负载平衡。 但是我希望能够只使用登录,因此删除端口。我有办法做到这一点吗? 编辑:我在31380上访问它,因为它被设置为使用NodePort(htt

  • 问题内容: 我有一个Java小程序,用于查询Oracle数据库中的数据。从IDE内部运行时,它可以正常运行。但是,当我将其作为嵌入在网页中的小程序运行时,在类加载器中出现“访问被拒绝”错误,并且我并没有最模糊的想法对我有什么要求: 问题答案: 小程序在具有严格限制的安全规则的环境中运行。您至少需要在小程序上签名。 但是,这里的问题更大,在小程序内执行JDBC是一个非常糟糕的主意。该applet的源

  • 问题内容: 我在服务器中提取,配置并使用了make作为安装包。 但是,我无法使用 make install 。我得到错误 我运行文件夹 我仍然遇到相同的错误。 如何在没有sudo访问的情况下运行 make install ? 问题答案: 如何安装到主目录下的路径? 然后运行: 同样,如果您的脚本(例如CGI)需要您自己的Python用户版本,则必须明确告诉它们: 而不是使用默认的系统Python,

  • 问题内容: 通过JDBC 4.1或更早版本从数据库中检索java.sql.Timestamp时,如何获取/转换为java.time对象? Postgres的开源JDBC驱动程序都不兼容JDBC 4.2,因此我正在寻找一种在JDBC 4.1中使用java.time的方法。 问题答案: 通过将驱动程序与Java 8及更高版本一起使用,您应该自动免费在对象上获取一些方法。两者和具有相似的转换方法。 即,