1、问题
在做爬虫时写了两个代码遇到这两个坑,运行代码时报有下面的错误:
第一个错误如下:
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
第一个错误对应的代码如下:
from selenium import webdriver
import time
# 实例化一个浏览器
driver = webdriver.Chrome()
# 发送请求
driver.get("http://www.baidu.com")
# 元素定位的方法, send_keys可以往一个input标签里输入内容
driver.find_element_by_id("kw").send_keys("python")
# 点击搜索
driver.find_element_by_id("su").click()
# 退出浏览器
time.sleep(3)
driver.quit()
第二个错误如下:
selenium.common.exceptions.WebDriverException: Message: 'phantomjs' executable needs to be in PATH.
第二个错误对应的代码如下:
from selenium import webdriver
import time
# 实例化一个浏览器
driver = webdriver.PhantomJS()
# 设置窗口大小
# driver.set_window_size(1920, 1080)
# 最大化窗口
driver.maximize_window()
# 发送请求
driver.get("http://www.baidu.com")
# 进行页面截屏
driver.save_screenshot("./baidu.png")
# 获取html字符串
print(driver.page_source)
# 获取当前url
print(driver.current_url)
# 获取cookie
cookies = driver.get_cookies()
print(cookies)
print("*"*30)
cookies = {i["name"]: i["value"] for i in cookies}
print(cookies)
# 退出浏览器
time.sleep(3)
driver.quit()
2、分析原因
对于第一个错误是因为可执行文件chromedriver没有添加到路径中,对于第二个错误也是因为可执行文件phantomjs没有添加到路径中,也就是说系统找不到可执行文件。
3、解决
1、问题一的解决。
1、安装selenium包(这个包本人是安装在虚拟环境下的),查看所装chrome浏览器的版本,在官网下载chromedriver,chrome与chromedriver的版本要一致。
pip install selenium
google-chrome --version
本人chrome浏览器的版本为77.0.3865,则进入其官网下载相应的chromedriver版本,选择相应的系统,我这里下载的linux系统。
2、找到chromedriver压缩文件的路径,解压文件,然后将解压后的文件移动到自己想要放置的路径下,我这里是移动到/opt路径下。
unzip chromedriver_linux64.zip
sudo mv ./chromedriver /opt
3、在程序中添加路径,修改程序如下:
from selenium import webdriver
import time
# 实例化一个浏览器,设置chromedriver存放路径
driver = webdriver.Chrome("/opt/chromedriver")
# 发送请求
driver.get("http://www.baidu.com")
# 元素定位的方法, send_keys可以往一个input标签里输入内容
driver.find_element_by_id("kw").send_keys("python")
# 点击搜索
driver.find_element_by_id("su").click()
# 退出浏览器
time.sleep(3)
driver.quit()
4、运行程序。
弹出浏览器,并自动搜索python,完美解决。
2、问题二的解决。
1、安装phantomjs包。
sudo apt install phantomjs
2、修改程序,运行程序。
from selenium import webdriver
import time
# 实例化一个浏览器,设置phantomjs存放路径
driver = webdriver.PhantomJS("/usr/bin/phantomjs")
# 设置窗口大小
# driver.set_window_size(1920, 1080)
# 最大化窗口
driver.maximize_window()
# 发送请求
driver.get("http://www.baidu.com")
# 进行页面截屏
driver.save_screenshot("./baidu.png")
# 获取html字符串
# print(driver.page_source)
# 获取当前url
# print(driver.current_url)
# 获取cookie
# cookies = driver.get_cookies()
# print(cookies)
# print("*"*30)
# cookies = {i["name"]: i["value"] for i in cookies}
# print(cookies)
# 退出浏览器
time.sleep(3)
driver.quit()
3、这个时候又报警告了, 意思是说selenium对phantomjs的支持已经被弃用,请改用chrome或firefox的无头版本。
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
4、经过一番百度发现,Chrome和Firefox相继推出了无头浏览器模式,phantomjs独领风骚的局面瞬间丧失。
5、如果还想用phantomjs的话,降低版本,如果不想使用,那就用Chrome和Firefox推出的无头浏览器模式,这里只讲述chrome的无头浏览模式,其用法与phantomjs一样的,firefox的大同小异,自行百度。
6、安装的包前面都已经安装过了,直接上程序了。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 导入配置chrome启动属性的类,这两种导入方法都可以
# chrome_options = Options()
chrome_options = webdriver.ChromeOptions()
# 添加启动参数,此处参数不能为空,headless就是设置无头浏览器模式,就是无界面浏览器模式
chrome_options.add_argument("headless")
# 禁止gpu加速
chrome_options.add_argument('disable-gpu')
# 实例化一个浏览器,设置chromedriver的存放路径,将设置的启动属性导入
driver = webdriver.Chrome("/opt/chromedriver", chrome_options=chrome_options)
# 设置窗口大小
# driver.set_window_size(1920, 1080)
# 最大化窗口
driver.maximize_window()
# 发送请求
driver.get("http://www.baidu.com")
# 设定页面加载时间
# driver.set_page_load_timeout(10)
# 进行页面截屏
driver.save_screenshot("./baidu.png")
# 获取html字符串
# print(driver.page_source)
# 获取当前url
# print(driver.current_url)
# 获取cookie
# cookies = driver.get_cookies()
# print(cookies)
# print("*"*30)
# cookies = {i["name"]: i["value"] for i in cookies}
# print(cookies)
# 退出浏览器
driver.quit()
到此,全部解决