使用Linux服务器爬取网站并截图
一、安装chrome及chromedriver
具体实现方法请参考我的另一篇博客Chrome 浏览器及Chromedriver在AlmaLinux的安装
二、代码
from selenium import webdriver
# 配置谷歌浏览器静默启动【后台启动】
chrome_options = webdriver.ChromeOptions()
# 初始化谷歌浏览器的配置【必须加上】
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.baidu.com/")
driver.save_screenshot('screenshot2.png')
driver.quit()
print("截图成功。")
截图结果如下:
关于用Python如何实现网页自动截图功能的代码参考的是这篇博客:
用Python如何实现网页自动截图功能?
遇到问题
在我正确安装完浏览器及其驱动后运行代码一直报错:
我以为是代码没有配置好,后来发现是服务器没办法显示浏览器的问题,要设置一下,关键就是这几行代码
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
参考解决方案的链接是selenium centos7 Chrome failed to start: exited abnormally错误解决方法
然后在设置函数webdriver.Chrome()的参数时,遇到了新旧版本参数不一致的问题,
很多博客的selenium是3,会使用chrome_options,chrome_options,这样会报错,因为在4中,这两个参数已经被弃用
在selenium4中使用的是参数options和service,可以使用以下代码指定谷歌(chrome)目录和驱动(chromedirver)目录
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# 创建 Options 选项对象
opt = Options()
opt.binary_location = r'F:\Chrome\Application\chrome.exe' # 指定 Chrome 浏览器的路径
# 创建 Service 对象
ser = Service()
ser.executable_path = r'F:\Chrome\chromedriver\chromedriver.exe' # 指定 ChromeDriver 的路径
# 初始化 WebDriver,使用之前创建的 Options 和 Service 对象
driver = webdriver.Chrome(options=opt, service=ser)
# 打开网页
driver.get('http://www.baidu.com')
# 关闭浏览器
driver.quit()