Selenium是一个用于浏览器自动化测试框架,常被用于模拟真实用户使用浏览器对Web应用程序进行测试

       Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。因此也经常用于爬虫领域。爬虫中使用Selenium是为了解决 requests 无法直接执行 JavaScript 代码的问题。通过驱动浏览器,模拟浏览器的真实操作,如跳转、输入、点击、下拉等,拿到JS代码渲染之后的结果。从而获取网页上需要的数据。

       Selenium 提供了Python 的第三方库,对外提供的接口能够操作浏览器,从而让浏览器完成自动化的操作。

       Selenium 自己不带浏览器,需要与浏览器结合在一起才能使用。

       Selenium库的安装

       在电脑上安装好Python后,在CMD命令提示符下,用pip命令进行安装(我使用的是Python 3.12.0,已提前安装好。IDE为PyCharm 2023.3.2 Community)

       请提前将安装源更换为国内镜像源,我使用的是清华源。

       pip install selenium == 4.2.0

       安装完成后,在Pycharm就可以使用selenium库来写我们自己的爬虫代码啦!

       现在大部分网站都做了反爬检测,因此,需要绕过网站的反爬机制。我们采取浏览器无头模型进行。

       无头模式具有以下优点

       速度与性能

       由于无需加载可视化界面,Headless模式下的测试速度通常比普通模式更快。

        隐秘性与稳定性

        无头模式下不会弹出可见的浏览器窗口,可以在后台静默运行,不影响用户体验。

        节省资源

        在一些资源受限的环境中,如Linux环境下,使用无头模式可以节省系统资源,提高性能和稳定性

       以下是我自己写的测试代码,使用的是Microsoft Edge浏览器,浏览器版本:126.0.2592.81 (正式版本) (64 位)

       

#导入selenium库
from selenium import webdriver
# 在这里导入浏览器设置相关的类
from selenium.webdriver.edge.options import Options

# 无可视化界面设置 #

edge_options = Options()
# 使用无头模式
edge_options.add_argument('headless')
# 禁用GPU,防止无头模式出现莫名的BUG
edge_options.add_argument('disable-gpu')
edge_options.add_argument("disable-blink-features=AutomationControlled")
edge_options.add_experimental_option('excludeSwitches', ['enable-automation']) # 这里去掉window.navigator.webdriver的特性
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36'  #设置了两user_agent,任选其一就可以
user_agent1='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
edge_options.add_argument(f'user-agent={user_agent}')
edge_options.add_argument('lang=zh_CN.UTF-8')
# 将参数传给浏览器
browser = webdriver.Edge(options=edge_options)

# 启动浏览器
url = "https://www.sogou.com/"
browser.get(url)
page_source = browser.page_source
#print(page_source)
print(page_source)

# 关闭浏览器
browser.quit()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

      使用谷歌Chrome浏览器的话,代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
options = webdriver.ChromeOptions()
options.add_argument('--headless=news')  # 添加无头参数
options.add_argument('--disable-gpu')  # 防止 GPU 导致的问题
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option('excludeSwitches', ['enable-automation'])
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36'
options.add_argument(f'user-agent={user_agent}')
options.add_argument('lang=zh_CN.UTF-8')
driver = webdriver.Chrome(options=options)
driver.get('https://www.sogou.com/')
#page_source = driver.page_source
#print(page_source)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

       Chrome和Edge在设置options参数时,略有不同。Edge的参数是不用写 “--”的,而Chrome是需要的。另外一点,Chrome的optons参数在设置 headless时,添加了==news参数。Chrome版本126.0.6478.127(正式版本)(64 位) 测试通过。

我未安装Firefox,故FireFox未测试

以上代码,在Pycharm 2023.3.2  以及  Vscode中测试通过。

欢迎各位大佬的批评指导。