linux下使用selenium遇到的问题

项目场景:

linux下使用selenium:
一:依赖引入:

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

二:安装google-chrome

下载:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

三:验证成功了没

检验是否安装成功:
google-chrome --version

三:chromedriver安装
从这个网站可以下载chromedriver:http://chromedriver.storage.googleapis.com/index.html
可以下载chromedriver各种版本,并且包括windows、linux、mac版本。
进入网站之后找到跟89.0.4389.114相近的一个版本:

我们要下载linux64.zip那一个。

下载方式:
鼠标右键单击,然后点击复制链接,复制了下载链接之后,回到linux中使用wget下载

wget http://chromedriver.storage.googleapis.com/89.0.4389.23/chromedriver_linux64.zip

下载好之后是一个zip文件,需要进行解压

解压命令:

unzip chromedriver_linux64.zip

解压完成之后当前目录就会有一个chromedriver文件了

四:程序书写:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
def test():
    chrome_options = Options()
    chrome_options.add_argument("--mute-audio")  # 将浏览器静音
    # -----如果咋们的linux系统没有安装桌面,下面两句一定要有哦,必须开启无界面浏览器-------
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument('headless')
    chrome_options.add_argument('window-size=1920x1080')
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
    chrome_options.add_argument(f'user-agent={user_agent}')
    # ------------------------------------------------------------------------
    service = Service(executable_path='/home/emrpg/python_Web/lib/chromedriver-linux64/chromedriver')
    # 使用Chrome浏览器驱动
    driver = webdriver.Chrome(service=service, options=chrome_options)

    driver.get('https://blog.csdn.net/FujLiny')

    print('不离鞘' in driver.page_source)

    driver.quit()  # 关闭浏览器
test()

问题描述

例如:

linux上运行含有chromedriver的程序,会出现这个,要点击后程序才能执行
在这里插入图片描述


原因分析:

提示:这里填写问题的分析:

程序正在尝试使用X11转发,但没有找到合适的X11转发工具来处理这个请求。在Linux环境中,如果你的程序需要图形界面(GUI)支持,比如使用Selenium WebDriver来操作浏览器,那么你需要确保你的系统已经配置好了X11转发。

如果你在没有图形界面的Linux服务器上运行程序,或者在没有正确配置X11转发的环境中运行,你可能会遇到这个问题。解决这个问题的方法有几种:

安装X11转发工具:如果你的Linux系统没有安装X11转发工具,你可以安装一个。例如,你可以安装x11vnc或xauth。在Debian/Ubuntu系统上,你可以使用以下命令来安装x11vnc:

sudo apt-get install x11vnc

或者安装xauth:

sudo apt-get install xauth

使用无头浏览器:如果你的程序不需要图形界面,你可以使用无头浏览器(headless browser)来运行。对于Chrome,你可以使用–headless选项来启动浏览器。例如:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)

配置X11转发:如果你在本地机器上运行程序,并且你的本地机器有图形界面,你可以通过SSH连接时启用X11转发。在SSH连接命令中添加-X或-Y选项:

ssh -X user@yourserver

然后在服务器上运行你的程序,它应该能够正确地显示图形界面。
使用虚拟显示服务器:如果你的程序需要图形界面,但你不想在服务器上安装X11转发工具,你可以使用虚拟显示服务器,如Xvfb。在运行你的程序之前,启动Xvfb:

Xvfb :1 -screen 0 1280x1024x24 &
export DISPLAY=:1

我已经用了无头浏览器还是会提示,所以我选择安装Xvfb


解决方案:

# 启动虚拟显示器
Xvfb :99 -screen 0 1280x1024x24 &

# 设置DISPLAY环境变量
export DISPLAY=:99

# 运行你的Python脚本
python your_script.py

此时还会报一下警告:

(lyhenv) emrpg@emrpg-Standard-PC-i440FX-PIIX-1996:~/python_Web/SendTopicScript/wukong$ The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Could not resolve keysym XF86CameraAccessEnable
> Warning:          Could not resolve keysym XF86CameraAccessDisable
> Warning:          Could not resolve keysym XF86CameraAccessToggle
> Warning:          Could not resolve keysym XF86NextElement
> Warning:          Could not resolve keysym XF86PreviousElement
> Warning:          Could not resolve keysym XF86AutopilotEngageToggle
> Warning:          Could not resolve keysym XF86MarkWaypoint
> Warning:          Could not resolve keysym XF86Sos
> Warning:          Could not resolve keysym XF86NavChart
> Warning:          Could not resolve keysym XF86FishingChart
> Warning:          Could not resolve keysym XF86SingleRangeRadar
> Warning:          Could not resolve keysym XF86DualRangeRadar
> Warning:          Could not resolve keysym XF86RadarOverlay
> Warning:          Could not resolve keysym XF86TraditionalSonar
> Warning:          Could not resolve keysym XF86ClearvuSonar
> Warning:          Could not resolve keysym XF86SidevuSonar
> Warning:          Could not resolve keysym XF86NavInfo
Errors from xkbcomp are not fatal to the X server忽略这些警告不在终端显示

这些警告信息是由XKEYBOARD keymap编译器(xkbcomp)产生的,表示它无法解析某些键符号。这些键符号可能与您的键盘布局或驱动程序有关。虽然这些警告不会影响X服务器的正常运行,但如果您希望忽略它们并在终端中不显示,可以尝试以下方法:

检查您的键盘布局设置,确保它们正确配置。您可以使用setxkbmap命令来查看和更改键盘布局。例如,要查看当前的键盘布局,可以运行:

setxkbmap -query

确保您的系统已安装了正确的驱动程序。对于某些特定的键符号,您可能需要安装额外的软件包或更新现有的驱动程序。
如果问题仍然存在,您可以尝试在启动X服务器时禁用这些键符号的映射。这可以通过编辑/etc/default/keyboard文件来实现。在该文件中,找到XKBOPTIONS变量,并添加"noXF86CameraAccessEnable"、"noXF86CameraAccessDisable"等选项,以禁用相应的键符号映射。例如:

XKBOPTIONS="noXF86CameraAccessEnable noXF86CameraAccessDisable noXF86CameraAccessToggle noXF86NextElement noXF86PreviousElement noXF86AutopilotEngageToggle noXF86MarkWaypoint noXF86Sos noXF86NavChart noXF86FishingChart noXF86SingleRangeRadar noXF86DualRangeRadar noXF86RadarOverlay noXF86TraditionalSonar noXF86ClearvuSonar noXF86SidevuSonar noXF86NavInfo"
保存文件后,重新启动服务以使更改生效。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值