wls2 使用 Selenium + chrome爬虫
在一个机缘巧合之下,我开始接触爬虫,之前弄毕设获取人脸图像得时候用过一下。但是也只是“套公式”,没理它是怎么用的。现在开始使用windows子系统来好好体验一下这个Web的自动化测试工具,这里的子系统是Ubuntu 20
安装谷歌
- 即使你windos上安装了谷歌浏览器,但是你的子系统是没办法使用的,所以你还需要再子系统安装谷歌浏览器
- 安装需要用到的库
sudo apt-get updatesudo apt-get install -y curl unzip xvfb libxi6 libgconf-2-4
- 安装谷歌浏览器
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb # 或者再你谷歌页面取下载你想要的linux sudo apt install ./google-chrome-stable_current_amd64.deb
- 输入命令查看是否成功
google-chrome --version
- 接下来安装ChromeDrive
在这里页面ChromeDrive找到与你子系统下载的谷歌版本差不多的谷歌引擎,然后wget https://chromedriver.storage.googleapis.com/93.0.4577.63/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo ln [你放解压后文件的路径]/chromedriver /user/local/bin/chromedriver # check是否没问题 chromedriver -v > ChromeDriver 93.0.4577.63 (ff5c0da2ec0adeaed5550e6c7e98417dac77d98a-refs/branch-heads/4577@{#1135})
安装VcXsrv
- 由于子系统是无界面的那还是需要自己安装相关的图形化工具,这里使用的是VcXsrv
- 在Linux中,displayen 环境变量告诉GUI应用程序我们要使用X服务器的IP地址。由于在WSL2中,Windows land的IP地址不再是LocalHost,因此我们需要将Display设置为正确的IP地址:
exportDISPLAY=$(cat /etc/resolv.conf|grep nameserver|awk'{print $2; exit;}'):0.0
可以参考这个来安装VcXsrv安装
开始尝试使用子系统的谷歌
- 首先打开你的VcXsrv
注意这个要选择,否则会报错
- 然后再子系统输入
google-chrome
ok 打工完成
- 但是这时你会发现,当你浏览含有中文的页面的时候会出现“框框”
这是因为子系统缺少对中文的支撑,这时,又又~需要安装库sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy
这时就没问题了~
安装Selenium
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。Selenium 官方参考文档
- 安装
sudo pip3 install selenium
Selenium 库里有个叫 WebDriver 的 API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互 (发送文本、点击等),以及执行其他动作来运行网络爬虫。
尝试一下
- 打开python命令行
>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get("http://www.baidu.com/")
此时打开了百度页面
- 继续输入
# 获取id=kw的输入框,输入爬虫 >>> driver.find_element_by_id("kw").send_keys(u"爬虫") # 获取到id="su"是百度搜索按钮,click() 是模拟点击 >>> driver.find_element_by_id("su").click()
- 结束
>>> dirver.close()
接下来就可以继续使用此工具拉~