wsl设置chromedriver.exe环境变量调用windows下的chromedriver及chrome浏览器进行自动化测试或爬取网页内容
前言
为啥要用wsl呢?大家应该都知道理由了,启动速度快,占用内存小,还能直接调用windows的各种资源,在平常不使用linux的时候可以安心享受windows的便利,这么方便的工具就是我用它的原因了。
然后近来想学习一些selenium这样的浏览器自动化测试工具,每次将驱动chromedriver.exe放在脚本目录肯定很不方便了,所以才想要设置chromedriver.exe环境变量,从而使python可以自动去找到驱动器,那就方便多了。
但是在这个过程中遇到了困难,网上居然也没有什么有效的解决方案,就自己写了。
我只讲我的环境,也就是chromedriver的设置方法,其他浏览器设置方法都类似。
环境及工具包
- 主系统:win10
- 子系统:Ubuntu 18
- wsl调用
- chromedriver.exe驱动及chrome浏览器
解决方法
1.windows下加环境变量
本来是打算在Linux中直接设置环境变量的,然后发现其实wsl 2.0已经直接和windows中的环境变量互通了,所以直接在windows中设置环境变量即可:
我的电脑-右键属性-高级系统设置-环境变量-系统变量中的Path
直接添加一条路径:{chromedriver.exe驱动所在的文件夹},如下:
然后确定,wsl就可以直接读取到环境变量,可以用以下语句检测验证:
echo $PATH
如果没有下载chromedriver驱动的话直接去下面网址找相应版本下载,不过我想应该不会吧:
https://sites.google.com/a/chromium.org/chromedriver/downloads
2.添加软链接
经过上面的步骤之后其实windows已经能正确找到chromedriver.exe的位置并且运行了,如果用windows上的python解析器其实已经可以正常解析了,但是问题是,我的python解析器在Linux子!系!统!上!,这样就无法正常识别使用驱动。
其实wsl是可以直接识别并运行exe文件的,直接在wsl中输入notepad.exe就可以跳出记事本的界面:
这点我觉得碉堡了,子系统可以直接调用windows上的可执行文件并且在windows上的图形化界面中显示出来,但是没办法啊,奈何wsl还是linux的本质啊,linux中带.exe后缀的软件并不是可执行文件,这也就造成了wsl虽然能够执行exe文件,但是不会把它当作可执行文件。
所以,在wsl中的python解析器在执行时会找chromedriver,而不是chromedriver.exe!
随便一个python测试脚本:
from selenium import webdriver
driver = webdriver.Chrome()
执行脚本就会有这样的报错:
即找不到路径。
解决方法倒也简单,直接在驱动器目录下创建一个名为chromedriver,并且指向chromedriver.exe的软链接即可(我真是个小机灵鬼):
cd 驱动目录路径
ln -s chromedriver.exe chromedriver
这样,在进行导入就不会再报错了: