一个月左右以来,我每天都在使用EC2实例运行带有cron的python脚本。该脚本使用selenium。直到今天,我的脚本还没有运行,一切都正常工作。
我试过手动运行它,但它也不起作用。错误信息显示
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.
NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"cssselector","selector":"#ctl00_ctl00_moteurRapideOffre_
ctl01_EngineCriteriaCollection_Contract > option:nth-child(5)"}
(Session info: headless chrome=90.0.4430.85)
然而,同样的脚本在我的电脑上运行良好(即在我的Macbook上,而不是在AWS EC2上(。
由于问题似乎来自Chrome,我在AWS EC2上使用卸载了它
sudo yum remove google-chrome-stable
然后我用重新安装了它
curl https://intoli.com/install-google-chrome.sh | bash
sudo mv /usr/bin/google-chrome-stable /usr/bin/google-chrome
google-chrome --version && which google-chrome
如果我尝试使用/usr/bin/google-chrome
在EC2上运行Chrome,它不起作用,并显示以下错误消息:
ERROR:browser_main_loop.cc(1386)] Unable to open X display.
我不知道它以前是否有效,因为我从来没有这样使用过。但这似乎是个问题。
我在网上看到,这可能是因为没有屏幕,我应该使用一个名为xvfb的包。我试着用以下代码安装它:
sudo yum install xorg-x11-server-Xvfb
我想这个软件包安装得很正确,但效果并不好。
总之,我认为我在python代码中的问题与Google Chrome无法正常工作有关,这可能与xvfb有关。但我一点也不确定,这正是我迄今为止所尝试的。
你能帮帮我吗?谢谢
您只需添加设置即可,每30分钟运行一次
*/30 * * * * export DISPLAY=:0 && ,<do what ever you want.>
如果这不起作用,并且在谷歌上找不到chrome或firefox,只需在shell BASH、FISH、ZSH等中运行下面的命令即可获得PATH。
echo $PATH
无论以上命令的结果如何,只需将其复制并粘贴到您的cronjob上,如下所示,
*/30 * * * * export DISPLAY=:0 && ,<your selenium script.>```
You can remove export ```export DISPLAY=:0``` line if you want to this in the background or make your driver headless.
The reason of doing this, you might install the respective from snapd etc and that's why path is not defined as you downloaded from separate resource.