如何解决Amazon Ubuntu ServerEC2上的Selenium没有打开某些链接,但在本地计算机上运行良好
我正在使用Selenium在服务器上打开某个网站(例如YouTube),但似乎无法打开该网站。但是,该代码在其他网站上也可以正常工作。这段代码在我的本地PC上也可以正常工作。
我不知道我的Chrome驱动程序或Selenium是否存在问题,但由于只能输出:“在获得网站之前”而已,因此无法打开youtube.com。没有显示任何异常/错误,但脚本仍在运行,我必须手动结束将其停止。
为什么Selenium无法在服务器上打开某些URL,但是在我的PC上可以正常工作?
options = webdriver.ChromeOptions()
options.add_argument("no-sandbox")
options.add_argument('--headless')
options.add_argument("--start-maximized")
PATH = "./chromedriver"
global driver
driver = webdriver.Chrome(PATH,chrome_options=options)
print("Before getting the website")
driver.get("https://youtube.com")
print("opened",driver.current_url)
解决方法
我有一个完全相同的问题。也许我不知道为什么会这样。
注意:
在不使用GUI的Ubuntu ec2上进行抓取时,您必须提供一些GUI界面来运行chrome,对我来说Xvfb解决了它。 “ Xvfb(X虚拟帧缓冲区的缩写)是一种内存显示服务器,用于类似UNIX的操作系统(例如Linux)。它使您可以在不显示的情况下运行图形应用程序(例如CI服务器上的浏览器测试),同时可以拍摄屏幕截图。”
解决方案
- 为ubuntu安装Xvfb:
var dataObj = JSON.parse(data); console.log(dataObj[0].category); //will return Damskie console.log(dataObj[1].category); //will return Męskie
- 现在以以下方式执行脚本:
sudo apt install xvfb
重要说明:
如果在初始化过程中被卡住的程序未显示任何输出,只需确保您未添加xvfb-run python[version] script.py
。
如果将此参数添加到您的chrome标头中,则它将禁用/ dev / shm。不确定,但是它是一些共享内存,而xvfb是我认为需要的内存显示服务器。
这对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。